Ruby on rails 克朗的工作休息会让你成为一颗可敬的宝石吗?

Ruby on rails 克朗的工作休息会让你成为一颗可敬的宝石吗?,ruby-on-rails,ruby-on-rails-3,rake,vote,Ruby On Rails,Ruby On Rails 3,Rake,Vote,我正面临一个非常奇怪的错误与宝石。事实上,我甚至不确定它是否与make\u voteable有关,或者它是否是一个rake问题 我的应用程序有一个项目模型。项目具有状态属性。它们以“正在开发”开始,在达到设定的开发截止日期后,状态变为“待定投票”。然后,用户可以对项目进行上下投票(直到达到投票截止日期),以确定项目的优先级 因此,如果项目的状态为“待定投票”,则“项目显示”视图将在“我的项目”控制器上显示指向以下操作的链接: def vote_yes @project = Project.f

我正面临一个非常奇怪的错误与宝石。事实上,我甚至不确定它是否与
make\u 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
如果我通过终端更新截止日期/状态/投票截止日期或手动更改数据库中的记录,一切都会很好。投票按预期进行,上升票和下降票存储在相应的项目记录中

但是,如果我运行cron作业I setup来处理这个问题(这是正常的应用程序工作流),视图会呈现投票链接,用户可以像往常一样单击这些链接,但projects表中不会存储投票。但是,votings表会正常填充,用户无法再次投票

cron作业所做的唯一事情就是从项目模型运行以下代码:

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
def self.close_项目
@已完成的项目=项目。其中('截止日期<?和状态=?',Time.now.utc,“开发”)
@已完成的项目。每个项目|
项目。更新_属性(:状态,“待定投票”)
project.update_属性(:投票截止日期,Time.now.utc+1.week)
结束
结束
最后一个观察:我运行了一次迁移,在运行了向同一模型添加向上/向下投票的迁移之后,将投票截止日期列添加到projects表中。我不认为这是个问题,但也许值得注意


我非常感谢您的任何意见。

结果表明,这只是一个验证错误,而不是由gem提出的。但这完全是我的错,因为验证应该只在创建时进行,而且也在更新时进行


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

OT,但是考虑重构这些方法:(你有没有跟踪投票代码以了解发生了什么?谢谢你的输入,Dave。我想我发现了一个验证问题,这不是gem或服务器提出的。尽管这是离题的,因为我只是在学习编程,你能告诉我如何重构代码吗?很抱歉,我让你看到了这么难看的行…;)(完全未经测试:)