我正在尝试找到一种方法,其中选择框填充了类别,当用户选择一个类别并提交时,它们将被重定向到所选类别页面,其中显示标记有该类别的所有列表。
基本上是一种habtm关系,其中列表has_and_belongs_to_many类别,反之亦然,并且通过类别控制器,所有类别都列在索引视图的选择框中,并且任何特定类别的选择都应重定向以显示其中的所有列表类别。
这就是我在类别索引页面中的内容
<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 %>
提交时,只有网址自行更新。像这样 - localhost:3000 / categories?utf8 =%E2%9C%93&amp; name%5Bid%5D = 1&amp; commit = Submit
尝试用ul列表,它的工作原理。但不能用选择框列表
来解决它类别控制器
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>
- 选择框未映射到正确的参数,并且仅映射到第二个选择,这不会产生任何结果。我怎么能纠正这个或我做得对吗
答案 0 :(得分:0)
你可能遇到路线问题。
如果您在routes.rb中执行resources :categories
,则类别#show的路由是/ categories /:id,因此您的表单实际上将指向类别#index。
也就是说,对于您当前的设置,id应该是URL的一部分而不是表单参数。
尝试将get 'categories/show' => 'categories#show'
添加到您的路线中。它不如默认路由好,它可以解决你的问题。