0

好的,如果您在类别和文章之间有 habtm 关系,现在可以通过类别索引页面执行过滤器,使用填充类别的两个选择框,显示属于一个或两个类别的文章?

这就是我尝试的方式。

类别控制器

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。

另外,habtm 完全有必要做这样的事情吗?如果在文章模型中有一个列,可以这样做吗?哪个是最好的方法?

谢谢

4

1 回答 1

0

我建议重命名第二个 collection_select ids 并在控制器中尝试使用 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 %>

我没有测试它,但这就是想法。

希望能帮助到你

于 2013-11-08T17:27:22.783 回答