2011-10-25 4 views
1

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를 동일한 모델에 추가 한 마이그레이션. 나는 이것이 문제가되어야한다고 생각하지 않지만, 아마도 주목할만한 가치가있을 것입니다.

정말 감사드립니다.

+0

OT, 그러나 이러한 방법을 리팩토링하는 것을 고려하십시오. (무슨 일이 일어나는지 보시려면 투표 코드를 찾으셨습니까?) –

+0

입력 해 주셔서 감사합니다. Dave. 보석이나 서버에서 제기하지 않은 유효성 검사 문제를 발견 한 것 같습니다. 그리고 주제가 없어도 프로그래밍을 배우는 중이므로 코드를 리팩토링하는 방법을 알려주시겠습니까? 죄송합니다. 그런 추악한 선을 보게 만들었습니다 ...;) – rapcal

+0

[이와 비슷한 것] (https : //gist.github.com/1314284) (완전히 테스트되지 않음 :) –

답변

2

보석에 의해 제기되지 않은 것은 유효성 검증 오류 일뿐입니다. 하지만은 입니다. 유효성 검사는 생성시에만 발생해야하므로 업데이트시에도 발생했습니다.

그러나 보석에 대한 코드가 개선 될 수 있다고 생각합니다. 그런 오류를 지적하면 github 페이지에서 약간의 피드백을 제공 할 것입니다.

관련 문제