我正在尝试运行后台邮件程序,并根据文章的参数,将不同的用户转储到邮件列表中。我根据要求制作新文章时收到此错误:
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
答案 0 :(得分:0)
回答有点迟,但是这个问题没有答案。
您的@all_users
实现是ActiveRecord_Relation对象的数组,除了在您的最后一个else
语句中,您对=
使用正确的赋值。
在@all_users
上进行迭代时,实际上是在向作业发送用户集合,而不是单个用户记录。
在您的情况下:只需在所有情况下都使用赋值运算符=
,而不是附加运算符<<
。保留each
的实现,然后将在记录上进行迭代。