如何在Rails中正确形成此控制器?

时间:2013-01-23 21:54:37

标签: ruby-on-rails ruby ruby-on-rails-3

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

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

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

然后我需要接受这些工作并检查他们的专栏“job_status”中是否有“已完成”的文字或其他“

如果jobs_status已“完成”,那么我需要运行代码,以便我执行“if”

我必须通过计算。

@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模板。

我确信谁比我更了解铁轨,马上就会看到我的错误。

1 个答案:

答案 0 :(得分: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进行两次查询。如果您无法弄清楚如何... link

,这里有一点帮助

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