1

我正在尝试运行后台邮件程序,并根据文章的参数,将不同的用户转储到邮件列表中。应要求撰写新文章,我收到此错误:

Actor crashed!
NoMethodError: undefined method `email' for #<User::ActiveRecord_Relation:0x007fca99f657c8>

这是逻辑:

def create
    @article = Article.new(article_params)

  @all_users = []

  if @article.football == true 
    @all_users << User.where( :sport => "Football").all 

  elsif @article.basketball == true    
    @all_users << User.where("users.sport LIKE ?", "%Basketball%").all 

  elsif @article.volleyball == true 
    @all_users << User.where( :sport => "Volleyball").all 

  elsif @article.lacrosse == true 
    @all_users << User.where( :sport => "Lacrosse").all 

  else 
    @all_users = User.all
  end

    if @article.save


    @all_users.each do |user|
      ArticleMailer.new.async.article_confirmation(user,@article)

   end 
   redirect_to @article

    else
     render 'new'
    end
end
4

1 回答 1

0

回答有点晚了,但这个问题没有答案。

您的实现@all_users是一个 ActiveRecord_Relation 对象数组,除了在else您使用正确分配的最后一条语句中=

在迭代时@all_users,您实际上是在将 User 集合发送到作业,而不是单个 User 记录。

在您的情况下:在所有情况下都只需使用赋值运算符=而不是附加运算符<<。保留您的实现each,然后将迭代记录。

于 2020-01-06T06:08:02.577 回答