Rails 在 Model 中使用 routes helper

qingxp9 · 2015年10月29日 · 最后由 vincent 回复于 2015年10月30日 · 2425 次阅读

在 View 中我们可以调用 routes 的帮助方法得到路径地址 比如下面代码的 search_path

<%= form_tag search_path , method: 'get'  do %> 
---
<%= end %>

如果想在 Model 中使用这个 helper 该怎么做呢?

中文网页中果然搜不到,终于还是在 stackoverflow 上找到了答案 整理摘录如下:

在 Rails 3 和 4 中调用

Rails.application.routes.url_helpers

比如

Rails.application.routes.url_helpers.posts_path
Rails.application.routes.url_helpers.posts_url(:host => "example.com")

为方便使用我们可以直接 include 这个模块

Rails.application.routes.url_helpers 

不过相比于 include 整个模块,更推荐 delegate

delegate :url_helpers, to: 'Rails.application.routes' 
url_helpers.users_url => 'www.foo.com/users'

http://stackoverflow.com/questions/341143/can-rails-routing-helpers-i-e-mymodel-pathmodel-be-used-in-models

如果 model 需要这个,说明 model 用错了。

2 楼 已删除

#2 楼 @qingxp9 控制器可以直接用吧。

#1 楼 @billy 还是有场景的,比如模型里面写发邮件的方法,邮件里面希望使用链接。

@ericguo 想了一下,好像很少见到这个场景,不是应该foo_path(@some_model)😄

#5 楼 @billy 准确的说是 foo_url(@some_model),不过坑爹的是 url routes helper 无法在 model 里面使用。

最好不要在 model 中使用 view 的方法,MVC,VC 对 M 的依赖应该是单向的,这样比较简单,假如让 M 依赖 V,会带来不少麻烦。

一个可能的解决方法是,view 层在调用 model 层,通过参数把数据(对象)传给 model。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号