1

我正面临make_voteable gem 的一个非常奇怪的错误。实际上,我什至不确定它是否与make_voteablerake 问题有关。

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

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

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 列添加到项目表中。我不认为这应该是一个问题,但也许值得注意。

我真的很感激任何意见。

4

1 回答 1

2

事实证明,这只是 gem 没有引发的验证错误。但这完全是我的错,因为验证应该只在创建时发生,而且它也在更新时发生。

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

于 2011-10-26T00:23:53.733 回答