0

当在 URL 中获取类时,我将如何在我的控制器中定义运行并执行以下操作;

我需要为 current_user 找到所有“工作”我猜是这样的;

@joblisting = current_user.Joblisting.find(params[:id])

然后我需要接受这些工作并检查他们的列“job_status”是否包含“已完成”文本或其他“

如果jobs_status是“完成”那么我需要运行代码所以我做一个“如果”

我必须通过计算。

@joblisting = current_user.Joblisting.find(params[:id])
if @joblisting.where(:project_status => "completed")
  number_to_currency(current_user.Joblisting.where(:project_status => 'completed').sum('jobprice') * 1.60 - current_user.Joblisting.where(:project_status => 'completed').sum('jobprice')) 
  Notifier.notify_payout(current_user).deliver
  @joblisting.project_status = 'paid'
  @joblisting.save
end

这就是我所拥有的,我坚持将计算传递给 Notifier.notify_payout 模板。

我敢肯定,谁比我更了解 Rails,谁都会马上看到我的错误。

4

1 回答 1

0

我的回答不会给你你想要的代码。我这样做是因为我觉得你还有很多东西要学,但我会告诉你该怎么做,只是不给你代码。如果你说这行代码有效....

 @joblisting = Joblisting.where(:developer_id => current_developer[:id])
 if @joblisting.where(:project_status => "completed")
   Notifier.notify_payout(current_developer).deliver
 end

那么就这样吧。至于将:project_status列从“已完成”更新为“已支付”,可以有多种处理方式。您可以在模型中创建一个方法(我们称之为project_is_paid),将项目状态更改为已付款,并notify_payout在成功时在方法中声明它。

但这可能会让其他人在查看您的代码并想知道为什么突然间数据库内的记录从“已完成”变为“已支付”时会感到困惑。此外,您还必须将作业列表对象作为参数传递,这更加工作。

另一种思考方式是在控制器内部编写一个简单的条件语句。如果邮件已送达,则调用方法project_is_paid。请注意不要开始将所有这些逻辑添加到您的控制器中,您的控制器应该简洁明了。让模型处理逻辑。

最后,我想回到您发布的工作控制器代码。我敢打赌,您可以将以下两行合二为一。

 @joblisting = Joblisting.where(:developer_id => current_developer[:id])
 if @joblisting.where(:project_status => "completed")

我为什么这么说?好吧,您正在对同一张表进行两次查询Job Listings。如果您无法弄清楚如何...链接,这里有一点帮助

如果我未能在评论中回答您的最新问题,我很抱歉。在您的问题中发布更新,我很乐意更新我自己的答案。

于 2013-01-24T19:19:04.003 回答