如何向有权查看 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
使用多态关联,我能够授予特定用户编辑特定 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