rails显示类别选择框并根据选择重定向

时间:2013-10-28 19:10:04

标签: ruby-on-rails ruby categories has-and-belongs-to-many grouped-collection-select

我正在尝试找到一种方法,其中选择框填充了类别,当用户选择一个类别并提交时,它们将被重定向到所选类别页面,其中显示标记有该类别的所有列表。

基本上是一种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>

- 选择框未映射到正确的参数,并且仅映射到第二个选择,这不会产生任何结果。我怎么能纠正这个或我做得对吗

1 个答案:

答案 0 :(得分:0)

你可能遇到路线问题。 如果您在routes.rb中执行resources :categories,则类别#show的路由是/ categories /:id,因此您的表单实际上将指向类别#index。

也就是说,对于您当前的设置,id应该是URL的一部分而不是表单参数。

尝试将get 'categories/show' => 'categories#show'添加到您的路线中。它不如默认路由好,它可以解决你的问题。