有没有办法在rails中重载map.resources?

时间:2009-05-21 00:42:06

标签: ruby-on-rails routing

我正在尝试在rails中创建干净的URL。我已经安装了PermalinkFu,我可以很好地生成链接。我想做的是保留我的RESTful资源。有没有办法可以超载:

map.resources :location

返回:永久链接变量而不是:id?

与我的创作类似:

map.connect 'location/:permalink' :controller => 'location', :action => 'show'

旁注:处理固定链接的最佳做法是什么,如果它们仅用于显示视图/显示操作,那么使用:id进行编辑/销毁/等?我是否应该关注控制器使用:id而不是:permalink作为变量名?

3 个答案:

答案 0 :(得分:2)

这是解决这个问题的方法:

在模型中使用to_param方法位置:

def to_param
  permalink
end

并在您的routes.rb

map.resources :location

无需为固定链接添加规则

然后你可以在你的控制器中找到这样的

@location = Location.find_by_permalink params[:id]

希望它有效。

答案 1 :(得分:0)

您是否有理由无法覆盖to_param模型中的Location方法?瑞恩贝茨有Railscast that explains how to do this

如果你想成为一个纯粹主义者,那么你应该使用固定链接进行所有操作,但使用数字ID进行编辑和销毁操作无疑更方便。我想这取决于你是否受到查看HTML并能够查看记录的实际主键的人的困扰。有些人可能会认为这是一个安全漏洞。

答案 2 :(得分:0)

寻找这个问题的答案。 :path_prefix似乎应该解决这个问题,但我不明白应该如何使用它。

http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/7fc46fd8e354792b/3e364626d9d67403?lnk=gst&q=restful+two+parameters