Ruby on rails 在When语句中正确重构的建议?

Ruby on rails 在When语句中正确重构的建议?,ruby-on-rails,switch-statement,delayed-job,Ruby On Rails,Switch Statement,Delayed Job,我试图在WHE语句中调用两个较长的命令,但出于某种原因,由于其语法,调用时它会执行两次其中的两个命令: @email = Email.find(params[:id]) delivery = case @email.mail_type # when "magic_email" these two delayed_jobs perform 2x instead of 1x. Why is that? when "magic_email" then Delayed:

我试图在WHE语句中调用两个较长的命令,但出于某种原因,由于其语法,调用时它会执行两次其中的两个命令:

  @email = Email.find(params[:id])
  delivery = case @email.mail_type
    # when "magic_email" these two delayed_jobs perform 2x instead of 1x. Why is that?
    when "magic_email"      then Delayed::Job.enqueue MagicEmail.new(@email.subject, @email.body)
                                 Delayed::Job.enqueue ReferredEmail.new(@email.subject, @email.body)
    when "org_magic_email"  then Delayed::Job.enqueue OrgMagicEmail.new(@email.subject, @email.body)
    when "all_orgs"         then Delayed::Job.enqueue OrgBlast.new(@email.subject, @email.body)
    when "all_card_holders" then Delayed::Job.enqueue MassEmail.new(@email.subject, @email.body)
  end
  return delivery

如何使我在点击“magic_email”时,只会将这两个延迟的作业呈现一次

q = [] a = case 1 when 1 then q.push 'ashish' q.push 'kumar' when 2 then q.push 'test' when 4 then q.push 'another test' end puts a.inspect #######["ashish", "kumar"] q=[] a=案例1 当1时,按下“ashish” q、 推‘库马尔’ 当2时,q.推送“测试” 当4时,q.推动“另一个测试” 结束 把a.inspect放进去
这很好用。这意味着语法正常时,您的情况。可能是您有其他问题。

您正在调用
返回传递
,而传递变量可能具有再次调用延迟作业的值。这取决于
然后
语句返回的内容,因此,如果可能,请尝试不返回任何内容。我相信您希望使用该函数执行延迟的工作,而不返回任何内容


也许您应该只使用
大小写
,而不将其存储在任何变量中。我的意思是交付变量在这里没有任何用途

我当时不知道有一个
。请问您对
送货做了什么
?case语句完成后它有值吗?我忘了在末尾添加return。这样,当执行此方法时,它只会生成它所到达的延迟::作业。