Zac*_*ght 18 routing ruby-on-rails
我正在Rails 3上创建一个博客应用程序,我想要覆盖为帖子生成的默认show route
resources :posts, :except => :show
这为节目路线产生了(我没有排除它),
/post/:id
我希望我的路由看起来像这样,其中url_title是我的模型在before_save上生成的字符串,它删除非字母数字字符并用连字符替换空格.
/:year/:month/:day/:url_title
我试图用这段代码来完成这个:
match "/:year/:month/:day/:url_title", :to => "posts#show", :as => :post
从理论上讲,这应该允许我调用post_path(@ post)(其中@post是我的post类的一个实例),它应该能够排除这个路径,它几乎可以工作.
唯一的问题是它试图用年份替换帖子的id.其他字段填写正确.我认为这种情况正在发生,因为rails有一些默认行为使得它真的,真的想在URL中拥有id,并且它不相信我使用我自己的唯一标识符(在这种情况下是post.url_title).
我可能错了.任何人都有这种路由的经验,或知道是什么?
Jes*_*ott 22
您可以使用to_param来制作rails用途
class Post < ActiveRecord::Base
  ...
  def to_param
    "#{year}/#{month}/#{day}/#{title.parameterize}"
  end
end
更多信息:http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-i-to_param和http://www.seoonrails.com/to_param-for-better-looking-urls.html
如果你走这条路线,你将需要创建一个永久链接属性,并使用Post.find_by_permalink(params[:id])而不是Post.find(params[:id])