make_voteablegemで非常に奇妙なバグに直面しています。実際、それがレーキの問題に関連しているのmake_voteable
か、それともレーキの問題なのかさえわかりません。
私のアプリケーションにはプロジェクトモデルがあります。プロジェクトにはステータス属性があります。それらは「開発中」として開始され、設定された開発期限に達すると、ステータスは「投票待ち」に変わります。次に、ユーザーはプロジェクトに優先順位を付けるために(投票期限に達するまで)プロジェクトを上または下に投票できます。
したがって、プロジェクトのステータスが「投票待ち」の場合、プロジェクトショービューには、プロジェクトコントローラーの次のアクションへのリンクが表示されます。
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
ターミナルからdeadline/status /voting_deadlineを更新するか、データベースのレコードを手動で変更すると、すべてがうまく機能します。投票は期待どおりに機能し、up_votesとdown_votesが対応するプロジェクトレコードに保存されます。
ただし、これを処理するためにセットアップしたcronジョブを実行すると、これは通常のアプリケーションワークフローであり、ビューは投票リンクをレンダリングし、ユーザーは通常どおりクリックできますが、投票はプロジェクトテーブルに保存されません。ただし、投票テーブルは正常に入力され、ユーザーは再度投票することはできません。
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
最後の観察:up / down_votesを同じモデルに追加した移行を実行した後、移行を実行してvoting_deadline列をプロジェクトテーブルに追加しました。これは問題ではないと思いますが、注目に値するかもしれません。
私は本当にどんな入力にも感謝します。