这是一个最佳实践问题。我有一个模型存储一些参数,用于生成一个javascript文件。一个模型实例生成一个文件。我使用erb模板进行params替换。问题是 - 在每次模型更新后放置生成js文件的代码的位置?模型文件看起来不是一个好的选择,因为模型不应该知道所有的erb和文件混乱。通常在用户请求的情况下调用控制器,但事实并非如此。我开始关注观察者,但仍有疑问。
答案 0 :(得分:1)
观察者将是一个很好的解决方案:首先在您的终端中运行rails generate observer jsfile
。我使用jsfile
作为您的型号名称。
根据您的需要编辑您的观察者,例如
class JsfileObserver < ActiveRecord::Observer
observe :jsfile
# after_save works both for update and create, which I guess is what you want
def after_save(record)
# generate the file with the params from your record
end
end
最后,不要忘记调整config/application.rb
文件
# Activate observers that should always be running.
config.active_record.observers = :jsfile_observer
当然,您必须重新启动服务器;)
答案 1 :(得分:1)
首先,将参数呈现给js代码的代码应该在视图中。视图用于生成输出。
其次,我会将代码写入控制器中的文件。控制器链接模型和视图 必须有一些事件来生成文件。它可能是对象的创建,对象的更改或生成文件的一些显式请求 这些事件中的每一个都应由控制器处理。
观察者更多的是处理'副作用'。