2009-05-21 69 views
2

我想在rails中创建干净的网址。我已经安装了PermalinkFu,我可以生成链接就好了。我想要做的是保持我的RESTful资源。有没有办法我可以超载:有没有办法在rails中重载map.resources?

map.resources :location 

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

我怎么可以创建类似:

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

一个侧面说明:什么是用于处理静态链接的最佳实践,它们只用于显示视图/ show动作然后使用:ID为编辑/破坏的/ etc?我应该甚至关心控制器使用:id而不是:permalink作为变量名吗?

回答

2

这是我的方式来解决这个问题:

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

def to_param 
    permalink 
end 

,并在你的routes.rb

map.resources :location 

有是不需要添加固定链接的规则

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

@location = Location.find_by_permalink params[:id] 

希望工程。

+0

这正是你所做的。 – 2009-05-21 15:05:16

+1

对,上面是我现在正在尝试改变的。 这似乎对任何人都不sl??当你真的传递params [:permalink]时使用params [:id]变量? 我想要做的是有map.resources:位置填充params [:永久链接] var而不是params [:id] – 2009-05-21 18:27:02

0

是否有原因导致您无法覆盖Location模型中的to_param方法?瑞安贝茨有Railscast that explains how to do this

如果你想成为一个纯粹主义者,那么你应该对所有的动作使用固定链接,但无论如何使用数字标识符来编辑和销毁动作无疑更加方便。我想这取决于你是否被浏览HTML的人困扰并能够看到你的记录的实际主键。有些人可能认为这是一个安全漏洞。

相关问题