如何向有权查看 post 的用户发送电子邮件 - 多态关联 Ruby-on-Rails

How sending emails to users authorised to view a post - polymorphic association Ruby-on-Rails

使用多态关联,我能够授予特定用户编辑特定 post.

的权限

我的模型是这样的

用户模型

has_many :postuser
has_many :posts, through: :postuser

Post 型号

has_many :postuser
has_many :users, through: :postuser

post 用户

belongs_to :post
belongs_to :user

我想在 post 更新时发送所有有权查看 post 的用户。

在我的 model_mailer 我有

class ModelMailer < ApplicationMailer
  def new_user_notification(post)
    @post = post
    mail to: @Post.postuser.user.email, subject: "Welcome User"
  end
end

但我得到了

undefined method `postuser' 

如何仅向通过 postusers.

相关的用户发送邮件

这是一个快速修复:

user.rb

has_many :postusers
has_many :posts, through: :postusers

post.rb

has_many :postusers
has_many :users, through: :postuser

postuser.rb

belongs_to :post
belongs_to :user

after_commit -> {
  ModelMailer.new_user_notification(post, user).deliver_now # or deliver_later
}, on: :create

model_mailer.rb

class ModelMailer < ApplicationMailer
  def new_user_notification(post, user)
    @post = post
    mail to: user.email, subject: "Welcome User"
  end
end

现在,每当您创建新的 post 用户时,after_create 触发器将 运行 并为您的用户发送电子邮件。

我还建议您将模型更改为 PostUser 并使用 post_users,这是 rails 的方式。

rails g model post_user post:references user:references

如果您想在 post 更新后发送电子邮件,您可以简单地执行以下操作。

def new_record_notification(post, current_user_email)
  @post = post
  @current_user_email = current_user_email  
  users_email = post.postusers.map{|post| post.user.email}.join(",")
  mail to: users_email, subject: "Your post has been updated"
end

然后您可以在 post 控制器

的更新方法中使用它
ModelMailer.new_record_notification(@project, current_user.email).deliver_now