0

選択ボックスにカテゴリを入力する方法を見つけようとしています。ユーザーがカテゴリを選択して送信すると、選択したカテゴリ ページにリダイレクトされ、そのカテゴリでタグ付けされたすべてのリストが表示されます。

基本的には、リストが has_and_belongs_to_many のカテゴリに、またその逆の habtm 関係であり、カテゴリ コントローラを介して、すべてのカテゴリがインデックス ビューの選択ボックスにリストされ、特定のカテゴリを選択すると、そのカテゴリのすべてのリストを表示するようにリダイレクトする必要があります。

これは私がカテゴリーインデックスページに持っているものです

<ul>
  <% @categories.each do |category| %>
    <li><%= link_to category.name, category_path(category) %></li>
  <% end %>
</ul>
<%= 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="actions">
    <%= f.submit "Submit" %>
  </div>
<% end %>

送信すると、URL のみが更新されます。このように - localhost:3000/categories?utf8=%E2%9C%93&name%5Bid%5D=1&commit=Submit

ul list を試してみましたが、うまくいきました。しかし、セレクトボックスリストでそれを解決することはできません

カテゴリ コントローラ

def index
  @categories = Category.all
end

def show
  @category = Category.find(params[:id])
end

なにが問題ですか

アップデート

ねえ、私はこのSQLをソートするようにしました -

def show     

@Category = Category.find_by_sql ["select place from listings l , categories c, categories_listings cl where c.id = cl.category_id and l.id = cl.listing_id and name in (?,?)" ,  params[:name][:id] , params[:name][:id]]

end

インデックスページで、フォームを更新しました-

<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> 

ページを表示

<ul>
  <% @Category.each do |c| %>
    <li><%= c %></li>
  <% end %>
</ul>

-選択ボックスが正しいパラメーターにマッピングされておらず、2 番目の選択にのみマッピングされているため、結果が得られません。どうすればこれを修正できますか、それとも正しいですか

4

1 に答える 1

0

ルートに問題がある可能性があります。routes.rb で実行している場合resources :categories、categories#show のルートは /categories/:id であるため、フォームは実際には、categories#index を指しています。

つまり、現在の設定では、id はフォーム パラメータではなく URL の一部である必要があります。

get 'categories/show' => 'categories#show'ルートに追加してみてください。デフォルトルートほど良くはありませんが、問題が解決する可能性があります。

于 2013-10-28T22:39:45.450 に答える