我正面临make_voteable gem 的一个非常奇怪的错误。实际上,我什至不确定它是否与make_voteable
rake 问题有关。
我的应用程序有一个项目模型。项目具有状态属性。它们以“开发中”开始,在达到设定的开发期限后,状态变为“待投票”。然后用户可以向上或向下投票(直到投票截止日期)来确定它们的优先级。
因此,如果项目的状态是“待投票”,项目显示视图会在我的项目控制器上显示以下操作的链接:
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
如果我通过终端更新截止日期/状态/投票截止日期或手动更改数据库上的记录,一切都会很好。投票按预期进行,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 列添加到项目表中。我不认为这应该是一个问题,但也许值得注意。
我真的很感激任何意见。