英文:
Rails: callback on another model
问题
在我所使用的应用程序中,有两个模型:Comment
和 User
。
例如,我想要在 Comment
更新时能够调用 User
中的一个方法,比如 send_email
。为什么不直接在 Comment
中编写 send_email
呢?因为那样的话,我会违反封装的原则。
那么,我的问题是,如何正确地在另一个模型上调用回调方法。示例:
after_update :user.send_email
希望这对你有帮助。
英文:
In an application I have, there are 2 models: Comment
and User
I want for example to be able to call a method in User
when Comment
is updated; as an example send_email
. Why not just write send_email in Comment
? Because then I'd be contradicting encapsulation.
My question then is, what is the right way to call a callback method on another model. Example:
after_update :user.send_email
答案1
得分: 1
after_update
接受方法名称作为参数。在你的示例中,:user.send_email
不是有效的方法名称。一种方法是创建一个调用用户对象上的 send_email
方法的方法,然后将其注册为回调函数。请查阅 Rails 指南中的Active Record Callbacks以获取完整文档。
after_update :send_email
def send_email
user.send_email
end
英文:
after_update
takes either the name of a method. In your example :user.send_email
is not a valid method name. One way is to create a method that calls send_email
on the user object, and then register this as the callback. See Rails Guides for full documentation on Active Record Callbacks.
after_update :send_email
def send_email
user.send_email
end
答案2
得分: 1
是的,你说得对,after_update
可以用于回调。假设评论和用户的映射是通用的。
# comment.rb
after_update :send_email_to_user
private
def send_email_to_user
user.send_email
end
# user.rb
def send_email
end
英文:
Yes you are right, after_update can be used for the callback.Assuming the comment and user mappings generically
#comment.rb
after_update :send_email_to_user
private
def send_email_to_user
user.send_email
end
#user.rb
def send_email
end
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论