Mar*_*ark 6 routes models ruby-on-rails-3
我使用模型实例方法t_param来生成SEO样式的URL
def to_param
url
end
Run Code Online (Sandbox Code Playgroud)
这样我就可以使用path_to_model(model)生成到模型的链接,并使用Model.find_by_url(url)查询模型.这到目前为止工作正常.
我的问题:我有后端的RESTFUL管理路由.我可以以某种方式使to_param方法对它所调用的路由作出反应吗?因为我想在后端使用ID参数而不是URL参数创建链接.或者这里的正确方法是什么?
我遇到过同样的问题。模型确实不能/不应该了解有关控制器的任何信息。控制器的工作是确定正在请求什么资源,并调用模型来访问它。如果您的 AdminController 需要使用标准数字 ID,您就不会想要触摸to_param.
事实证明,解决方案非常简单,我在生产中使用了它。
假设您已经为控制器命名了,您将拥有一个 MyModelController 和一个 Admin::MyModelController 以及它们的助手。在管理中,以标准方式做事。在 MyModelController 中,执行以下操作:
在您的资源操作中,引用它params[:id],但将其视为永久链接 (URL)。例如
def get
@my_model = MyModel.find_by_url(params[:id])
...
end
Run Code Online (Sandbox Code Playgroud)
在你的 MyModelHelper 中
def my_model_path my_model
super my_model.url
end
def my_model_url my_model
super my_model.url
end
Run Code Online (Sandbox Code Playgroud)
对我来说,感觉这是“不与轨道冲突”并完成我需要完成的事情的最佳方式。
可能有一种更聪明的方法来覆盖命名路由。另外我认为你不能使用helper :all这种方法,除非你在生成路径/url 之前检查你是否处于管理员状态。
| 归档时间: |
|
| 查看次数: |
4086 次 |
| 最近记录: |