Cron的工作打破了make_voteable gem?

时间:2011-10-25 16:11:17

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

我正面临着make_voteable宝石的一个非常奇怪的错误。实际上我甚至不确定它与make_voteable有关,或者它是否是一个耙子问题。

我的应用程序有一个项目模型。项目具有status属性。它们以“开发”开始,在达到设定的开发截止日期后,状态变为“待定投票”。然后,用户可以向上或向下投票(直到达到投票截止日期)以确定项目的优先顺序。

因此,如果项目的状态为“待定投票”,则项目展示视图会在项目控制器上显示指向以下操作的链接:

def vote_yes
  @project = Project.find(params[:id])
  current_user.up_vote(@project)
  flash[:success] = 'Thanks for voting!'
  redirect_to @project
rescue MakeVoteable::Exceptions::AlreadyVotedError
  flash[:error] = 'You already voted!'
  redirect_to @project
end

def vote_no
  @project = Project.find(params[:id])
  current_user.down_vote(@project)
  flash[:success] = 'Thanks for voting!'
  redirect_to @project
rescue MakeVoteable::Exceptions::AlreadyVotedError
  flash[:error] = 'You already voted!'
  redirect_to @project
end

如果我通过终端更新截止日期/状态/ voting_deadline或手动更改数据库上的记录,那么一切都很有效。投票按预期工作,up_votes和down_votes是相应项目记录中的商店。

但是,如果我运行cron作业,我设置为处理这个,这是正常的应用程序工作流,视图呈现投票链接,用户可以像往常一样点击它们,但没有投票存储在项目表中。但是,投票表会正常填充,用户无法再次投票。

cron作业唯一能做的就是从Project模型中运行这段代码:

def self.close_projects
  @finished_projects = Project.where('deadline < ? and status = ?', Time.now.utc, "Developing")
  @finished_projects.each do | project |
    project.update_attribute(:status, "Pending voting")
    project.update_attribute(:voting_deadline, Time.now.utc + 1.week )
  end
end

最后一点观察:在运行将up / down_votes添加到同一模型的迁移之后,我运行了迁移以将voting_deadline列添加到项目表。我不认为这应该是一个问题,但也许值得注意。

我非常感谢任何意见。

1 个答案:

答案 0 :(得分:2)

原来这只是一个没有被gem引发的验证错误。但它完全是我的错误,因为验证应该仅在创建时发生,并且它也发生在更新上。

但是,我认为gem的代码可以改进,指出这样的错误,所以我会在他们的github页面上提供一些反馈。