路由如何在rails 4中运行?我想要实现的是这样的网址:
..../categories/<name of category>
目前我得到:
..../categories?utf8=✓&category=dingus
html是:
<%= form_tag(categories_path, :method => "get") do %>
<%= select_tag 'category', options_for_select(@categories, params[:category]), {onchange: "this.form.submit();", prompt: "Select Category"} %>
<% end %>
和这样的路线:
get '/' => '<controller>#h'
get 'categories' => '<controller>#categories'
我知道我可以使用gem friendly_id来设置从类别/:id到category /:category的url样式。但我仍然坚持了解路线的最初步骤。我尝试了很多东西,但它非常令人困惑。任何想法或建议将不胜感激!
谢谢!
答案 0 :(得分:0)
请参阅Routing Guide,特别是有关资源的部分。
如果您有routes.rb
:
resources :categories
您可以使用表单助手,例如:
<%= form_tag(categories_path, :method => "get") do %>
<%= select_tag 'category', options_for_select(@categories.map {|c| [c.name, category_path(c)]}, params[:category]), {onchange: "window.location.href = this.value;", prompt: "Select Category"} %>
<% end %>
如果您在Category
模型中添加了to_param
定义:
class Category < ActiveRecord::Base
def to_param
name
end
end
然后,您的所有网址都会按照您的意愿.../categories/books
。 url_for
帮助程序会为您生成适当的URL:
assert category_path(@book_category) == "/categories/book"
有关详情,请参阅ActiveRecords::Integrations#to_param文档。
答案 1 :(得分:0)
我无法得到Sam的确切解决方案。我的@categories
是Post模型中唯一类别的派生数组:
@categories = Post.pluck(:category).uniq
所以稍作改动就像:
ERB:
<%= form_tag do %>
<%= select_tag 'category', options_for_select(@categories.map {|c| [c, show_category_path(c)]}, params[:category]), {onchange: "window.location.href = this.value;", prompt: "Select Category"} %>
<% end %>
routes.rb中:
get '/categories/:category' => 'posts#categories', as: 'show_category'
控制器
def categories
@posts = Post.where(category: params[:category])
end
因此网址为:/categories/dingus
。我有问题,空格现在显示为%20(例如/categories/dingus%20burger
,但这是另一回事,我怀疑to_param或url_for方法将有助于那个
本教程非常有助于我更好地了解路线:https://www.youtube.com/watch?v=16Bk_0RADLQ