好吧,如果你在类别和文章之间有habtm关系,现在通过类别索引页面可以使用填充了类别的两个选择框来执行过滤,这些类别显示属于其中一个或两个类别的文章? / p>
这就是我的尝试。
类别控制器
def index
@categories = Category.all
end
def show
@category = Category.find(params[:name][:id])
end
类别索引页
<%= form_for :categories, :url => {:action => :show}, :method => "get" do |f| %>
<div class="field">
<%= f.label :category %><br />
<%= collection_select(:name, :id, Category.all, :id, :name) %>
</div>
<div class="field">
<%= f.label :category %><br />
<%= collection_select(:name, :id, Category.all, :id, :name) %>
</div>
<div class="actions">
<%= f.submit "Submit" %>
</div>
<% end %>
类别显示页面
<ul>
<% @category.articles.each do |a| %>
<li><%= a.author %></li>
<li><%= a.title%></li>
<li><%= a.pub_date%></li>
<% end %>
</ul>
在此阶段,它仅根据第二个collection_select提供文章。
另外,完全有必要做这样的事情吗?如果在文章模型中有一个列,可以这样做吗?哪种方式最好?
感谢
答案 0 :(得分:0)
我建议重命名第二个collection_select id并在控制器中尝试使用OR的Where子句。这样的事情:
def index
@categories = Category.all
end
def show
@category = Category.where(:id => [params[:name][:id1], params[:name][:id2]])
end
并在您的索引页面中:
<%= form_for :categories, :url => {:action => :show}, :method => "get" do |f| %>
<div class="field">
<%= f.label :category %><br />
<%= collection_select(:name, :id, Category.all, :id1, :name) %>
</div>
<div class="field">
<%= f.label :category %><br />
<%= collection_select(:name, :id, Category.all, :id2, :name) %>
</div>
<div class="actions">
<%= f.submit "Submit" %>
</div>
<% end %>
我没有测试它,但这是个主意。
希望有所帮助