make_voteable 보석과 함께 매우 이상한 버그가 있습니다. 사실 나는 그것이 심지어 make_voteable
과 관련이 있는지 또는 레이크 문제인지 여부를 확신하지 못합니다.크론 작업으로 인해 make_voteable 보석이 손상됩니까?
내 응용 프로그램에는 Project 모델이 있습니다. 프로젝트에는 상태 속성이 있습니다. 그들은 "개발 중"으로 시작하고 설정된 개발 기한에 도달하면 상태가 "보류 중 투표"로 바뀝니다. 그런 다음 사용자는 투표 마감 시간에 도달 할 때까지 프로젝트의 위 또는 아래에 투표하여 우선 순위를 지정할 수 있습니다. 프로젝트의 상태가 "투표 보류"경우
그래서 프로젝트 쇼보기 내 프로젝트 컨트롤러에서 다음 작업에 대한 링크가 표시됩니다 : 나는 업데이트 할 경우
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 작업을 실행하면보기가 투표 링크를 렌더링하고 사용자는 평소와 같이 클릭 할 수 있지만 투표는 프로젝트 테이블에 저장되지 않습니다 . 그러나 votings 테이블은 정상적으로 채워지고 사용자는 다시 투표 할 수 없습니다.
크론 작업이 프로젝트 모델에서 코드의이 비트 실행 않는 유일한 것은 :
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
을 그냥 마지막 관찰 : 나는를 실행 한 후 프로젝트 테이블에 voting_deadline 열을 추가하기 위해 마이그레이션을 실행 up/down_votes를 동일한 모델에 추가 한 마이그레이션. 나는 이것이 문제가되어야한다고 생각하지 않지만, 아마도 주목할만한 가치가있을 것입니다.
정말 감사드립니다.
OT, 그러나 이러한 방법을 리팩토링하는 것을 고려하십시오. (무슨 일이 일어나는지 보시려면 투표 코드를 찾으셨습니까?) –
입력 해 주셔서 감사합니다. Dave. 보석이나 서버에서 제기하지 않은 유효성 검사 문제를 발견 한 것 같습니다. 그리고 주제가 없어도 프로그래밍을 배우는 중이므로 코드를 리팩토링하는 방법을 알려주시겠습니까? 죄송합니다. 그런 추악한 선을 보게 만들었습니다 ...;) – rapcal
[이와 비슷한 것] (https : //gist.github.com/1314284) (완전히 테스트되지 않음 :) –