Ajr*_*err 1 ruby-on-rails ruby-on-rails-3.1
在继续之前,我用Google搜索了这个.我知道你为什么不应该在模型中找到url_for的论据,因为这似乎违反了MVC范式.在这个例子中,我不同意,因为它更像是一些资源的API,而不是一个UI.
我创建了一个自定义响应器,并返回一个JSON对象,每个请求看起来像这样:
obj = {
json: resource.as_json,
request_url: params[:id] ? resource_url : collection_url,
partial: get_partial(:partial, options),
flash: flash,
flash_partial: get_partial(:flash, options),
user: @current_user,
status: response.status,
}
Run Code Online (Sandbox Code Playgroud)
我希望控制器响应的每个对象(使用respond_with)都有一个封闭的URL,以便在客户端我可以轻松地跟踪在何处发送对给定对象的额外请求(在这种情况下,抓取不同的视图表示取决于哪个小部件已订阅该对象的状态).
我认为最好的方法是在模型方面,因为这似乎是Rails想要它的方式.只需添加一个带url的函数,然后使用as_json(:methods =>:url).不幸的是,url_for在模型方面不可用,而且我无法找到将其包含在ActiveRecord :: Base中的Rails3.1兼容方式.
class << ActiveRecord::Base
def url
url_for self
end
end
Model.new.as_json(:includes => :url)
Run Code Online (Sandbox Code Playgroud)
我也愿意接受其他建议.
这似乎有用...这是一个黑客IMO:
class << ActiveRecord::Base
include Rails.application.routes.url_helpers
include ActionDispatch::Routing::UrlFor
def default_url_options
{ :host => 'localhost:3000' }
end
def url
url_for(self)
end
def as_json options
super options.merge(:methods => :url)
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1476 次 |
| 最近记录: |