Dav*_*ave 6 activerecord ruby-on-rails filter drop-down-menu
我正在使用轨道3,我有两个模型,场地和区域,每个区域有许多场地,每个场地属于一个区域.
我正在尝试找到一种方法来过滤场地索引中显示的场地记录,在同一页面的下拉框中选择了哪个区域.
下拉框当前显示我想要的所有区域记录,但在选择区域并单击提交按钮后,我希望索引页面重新加载,并且仅显示场地记录的部分区域,其区域与在下拉框.
我在模型中的示波器在rails控制台中调用时显示正确的场地,或者通过将控制器中的def索引更改为@venues = Venue.north/venue.south/venue.west.我只是想办法让所有场地都显示为默认值,然后根据从表格中选择的区域调用每个范围.
在这一点上我并不打算使用AJAX我只想了解如何以尽可能简单的方式完成它并且不使用sphinx/thinking_sphinx.
模型:
class Venue < ActiveRecord::Base
belongs_to :user
has_many :reviews
belongs_to :area
scope :north, where(:area_id => "2")
scope :west, where(:area_id => "3")
scope :south, where(:area_id => "4")
end
Run Code Online (Sandbox Code Playgroud)
查看:(场地index.html.erb)
<div class="filter_options_container">
<form class="filter_form">
<%= select("area", "area_id", Area.all.map {|a| [a.name, a.id] }) %>
<input type="submit" value="Filter" />
</form>
</div>
<div class="venue_partials_container">
<%= render :partial => 'venue', :collection => @venues %>
</div>
Run Code Online (Sandbox Code Playgroud)
控制器:
class VenuesController < ApplicationController
def index
@venues = Venue.all
end
end
Run Code Online (Sandbox Code Playgroud)
任何帮助深表感谢.
您可以在控制器中找到场地,具体取决于是否选择了区域.您可以修改视图以发送区域名称,而不是区域ID(这可能会使其更容易):
<%= select("area", "name", Area.all.collect(&:name)) %>
控制器看起来像这样 -
def index
if (params[:area] && Area.all.collect(&:name).include?(params[:area][:name]))
@venues = Venue.send(params[:area][:name].downcase)
else
@venues = Venue.all
end
end
| 归档时间: |
|
| 查看次数: |
10779 次 |
| 最近记录: |