我正在使用Rails 3 beta 4并尝试在我的模型中包含ActionController :: UrlWriter,这是我能说的正确的方法,但我得到“未初始化的常量ActionController :: UrlWriter” 。
知道为什么会这样吗?它是否在轨道3中移动?
答案 0 :(得分:3)
首先我同意zed。这不应该在模型中完成。您的模型应该不知道任何http网址。
我在resque工作中做同样的事情。这是我的所作所为:
include ActionDispatch::Routing::UrlFor
include ActionController::PolymorphicRoutes
include Rails.application.routes.url_helpers
default_url_options[:host] = 'example.com'
然后你可以调用任何常用的url生成器。
url_for(object)
page_url(object)
它将在主机上创建定义为default_url_options[:host]
答案 1 :(得分:1)
Can Rails Routing Helpers (i.e. mymodel_path(model)) be Used in Models?的答案非常好
或参见
http://api.rubyonrails.org/classes/ActionDispatch/Routing/UrlFor.html
http://siddharth-ravichandran.com/2010/11/26/including-url-helpers-in-models/
基本上,你可以在模型中做这样的事情:
def url
Rails.application.routes.url_helpers.download_attachment_path(self)
end
值得考虑的是,这是否是正确的层。在我的情况下,它是文件附件,我想做attachment.url而不是写出很多帮手。