如何让url_helper在Rails中传递permalink而不是id



我在Rails3项目中有以下路线:

match "/blog/:permalink" => "posts#show", :as => :post

当我通过这样的视图链接到我的帖子时:

<%= link_to @post.title, post_path(@post) %>

post的id被传递到post_path助手中(即使我的路由指定了permalink也被传递。

如何强制post_path发送permalink而不是post的id?我可以显式调用post_path(@post.permalink),但这似乎很糟糕。

我在路上错过什么了吗?

谢谢!

在模型上定义一个to_param方法,该方法返回要使用的字符串。

class Post < ActiveRecord::Base
  def to_param
    permalink
  end
end

请参阅此页面,此Railscast,(当然还有谷歌)了解更多信息。

[编辑]

我认为Polymorphic URL帮助程序不够聪明,无法处理你想在这里做的事情。我认为你有两种选择。

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) %>

试试这样的东西:

<%= link_to @post.title, post_path(:permalink => @post.permalink) %>

Rails应该根据您的路由自动构建URL(即相应地替换:permalink)。

相关内容

  • 没有找到相关文章

最新更新