我正面临着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列添加到项目表。我不认为这应该是一个问题,但也许值得注意。
我非常感谢任何意见。
答案 0 :(得分:2)
原来这只是一个没有被gem引发的验证错误。但它完全是我的错误,因为验证应该仅在创建时发生,并且它也发生在更新上。
但是,我认为gem的代码可以改进,指出这样的错误,所以我会在他们的github页面上提供一些反馈。