我在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 pagethis 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/

10-12 05:17