我在Rails3项目中有以下路线:
match "/blog/:permalink" => "posts#show", :as => :post
当我通过这样的视图链接到我的帖子时:
<%= link_to @post.title, post_path(@post) %>
post的id被传递到post_path helper(即使我的路由指定了permalink被传递)。
如何强制post_路径发送到permalink而不是post的id?
我可以显式地调用
post_path(@post.permalink)
,但这看起来很脏。我是不是在路上丢了什么东西?
谢谢!
最佳答案
在返回要使用的字符串的模型上定义to_param
方法。
class Post < ActiveRecord::Base
def to_param
permalink
end
end
有关更多信息,请参见this page,this Railscast,(当然还有Google)。
[编辑]
我不认为Polymorphic URL Helpers足够聪明来处理你想在这里做的事情。我想你有两个选择。
1。使用一个特殊的命名路由并传入与您的问题和jits的答案类似的参数。
match "/blog/:permalink" => "posts#show", :as => :post
并链接到它
<%= link_to @post.title, post_path(:permalink => @post.permalink) %>
2。创建一个新的助手来为您生成url
match "/blog/:permalink" => "posts#show", :as => :post_permalink
一个帮手
def permalink_to(post)
post_permalink_path(post.permalink)
end
在你看来
<%= link_to @post.title, permalink_to(@post) %>
关于ruby-on-rails - 如何让url_helper在Rails中传递permalink而不是id?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6218664/