0

カテゴリと記事の間に習慣的な関係がある場合は、カテゴリ インデックス ページから、カテゴリが入力された 2 つの選択ボックスを使用してフィルターを実行できます。これにより、いずれかまたは両方のカテゴリに属する​​記事が表示されます。

これが私が試した方法です。

カテゴリーコントローラー

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>

この段階では、2 番目の collection_select に基づいて記事のみを表示します。

また、habtm はこのようなことをするために完全に必要ですか? 記事モデルに代わりに列がある場合、これを行うことができますか? 最良の方法はどれですか?

ありがとう

4

1 に答える 1

0

2 番目の 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 %>

私はそれをテストしませんでしたが、これはアイデアです。

それが役に立てば幸い

于 2013-11-08T17:27:22.783 に答える