Rails: 在另一个模型上的回调

huangapple go评论56阅读模式
英文:

Rails: callback on another model

问题

在我所使用的应用程序中,有两个模型:CommentUser

例如,我想要在 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

huangapple
  • 本文由 发表于 2023年2月13日 23:00:43
  • 转载请务必保留本文链接:https://go.coder-hub.com/75437592.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定