当前位置:  开发笔记 > 程序员 > 正文

Rails中的漂亮(过时)RESTful URL

如何解决《Rails中的漂亮(过时)RESTfulURL》经验,为你挑选了0个好方法。

我希望我的网站网址看起来像这样:

example.com/2010/02/my-first-post

我的Post模型有slug字段('my-first-post')和published_on字段(我们将从中扣除网址中的年份和月份).

我希望我的Post模型是RESTful,所以url_for(@post)像他们应该的工作,即:它应该生成上述url.

有没有办法做到这一点?我知道你需要覆盖to_parammap.resources :posts使用:requirements选项集,但我无法全部工作.


我几乎完成了,我90%在那里.使用resource_hacks插件我可以实现这个目的:

map.resources :posts, :member_path => '/:year/:month/:slug',
  :member_path_requirements => {:year => /[\d]{4}/, :month => /[\d]{2}/, :slug => /[a-z0-9\-]+/}

rake routes
(...)
post GET    /:year/:month/:slug(.:format)      {:controller=>"posts", :action=>"show"}

并在视图中:

<%= link_to 'post', post_path(:slug => @post.slug, :year => '2010', :month => '02') %>

生成适当的example.com/2010/02/my-first-post链接.

我也想这样做:

<%= link_to 'post', post_path(@post) %>

但它需要覆盖to_param模型中的方法.应该相当容易,除了事实,to_param必须返回String,而不是Hash我喜欢它.

class Post < ActiveRecord::Base
  def to_param
   {:slug => 'my-first-post', :year => '2010', :month => '02'}
  end
end

导致can't convert Hash into String错误.

这似乎被忽略了:

def to_param
  '2010/02/my-first-post'
end

因为它导致错误:( post_url failed to generate from {:action=>"show", :year=>#它错误地将@post对象分配给:year键).我对如何破解它毫无头绪.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有