如何从Rails link_to函数中删除action参数?

时间:2010-04-27 15:14:58

标签: ruby-on-rails routing link-to

不确定如何构建这一点,所以这里......

我有以下link_to标记:

<%= link_to("My test title",{:controller=>"search", :action=>"for-sale", :title => listing.title, :search_term => search_term, :id=> listing.id}) %>

以及routes.rb文件中的以下自定义路由:

map.connect ':controller/:action/:title/search_item/:id', :controller=>'search', :action=>'for_sale' 

生成一个非常好的SEO友好URL:

/search/for-sale/sometitle/searchterm/123456

如何从两者中删除:action param,问题出在我取出:action选项&amp;将我的link_to标记更改为:

<%= link_to("My test title",{:controller=>"search", :title => listing.title, :search_term => search_term, :id=> listing.id}) %>

和我的自定义路线:

map.connect ':controller/:title/search_item/:id', :controller=>'search', :action=>'for_sale' 

生成的网址不再是SEO友好且非常难看:

/search?title=test&search_term=test&id=1141409

我的自定义路由重定向到控制器中的正确操作,因此不需要在URL中使用操作选项。任何时候我删除或重命名:action选项到其他东西 - URL变得“扭曲”,你知道我该怎么做吗?

尝试过多种选择,但似乎没有任何效果。

谢谢!

1 个答案:

答案 0 :(得分:3)

首先,您的路线':controller/:title/search_item/:id'没有:search_term参数,但您尝试将其传递给link_to :search_term => search_term

其次,如果您总是使用控制器'search',则无需将其作为参数传递。

因此,您的路线可能会变为'search/:title/:search_term/:id'

另外,尝试使用命名路由:

map.search 'search/:title/:search_term/:id', :controller=>'search', :action=>'for_sale'

<%= link_to("My test title", search_path(listing.title, search_term, listing.id)) %>

编辑可选参数

您可以在路径末尾提供参数的默认值。

所以,如果你设置

map.search 'search/:title/:search_term/:id', :controller=>'search', :action=>'for_sale', :id => nil, :search_term => nil

您可以创建没有ID的网址:search_path(listing.title, search_term) 或者没有id和search_term:search_path(listing.title)

如果您只想选择:search_term,请在路线末尾输入:

map.search 'search/:title/:id/:search_term', :controller=>'search', :action=>'for_sale', :search_term => nil