吸盘打孔运行后台作业ActiveRecord错误 - Rails应用程序

时间:2014-12-18 00:49:48

标签: ruby-on-rails-4 background-process mailer sucker-punch

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

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

1 个答案:

答案 0 :(得分:0)

回答有点迟,但是这个问题没有答案。

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

@all_users上进行迭代时,实际上是在向作业发送用户集合,而不是单个用户记录。

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