2010-02-22 5 views
3

저는 레일에서 강력한 투표 시스템을 구현하려했지만 어려움을 겪고 있습니다. 처음에는 자신의 투표 시스템을 만들었지 만 단순한 시스템이었습니다.rails app (또는 대안)에서 vote_fu 구현

간단히 말해 카운터 캐시를 사용하여 Answer 모델의 votes_count 열을 증가 시켰습니다. 투표 _fu를 발견하고 내 투표 시스템이 얼마나 더 강력 할 수 있는지 깨달을 때까지 잠시 동안 잘 돌아갔습니다. 나는 즉시 그것을 설치하고 전체 주말 내 응용 프로그램을 찢어 서 그것을 작동 시키려고 노력했다.

이 플러그인과 관련된 스택 오버플로에 대한 몇 가지 다른 질문이 있지만 실제로 최종 해결책이 없습니다.

answers_controller.rb :

def vote_up 
    answer = Answer.find(params[:id]) 
    current_user.vote_up(answer), :voter_id => current_user.id 
    redirect_to :back 
end 

votes_controller.rb :

def create 
    @quote = Answer.find(params[:answer_id]) 

    respond_to do |format| 
    if current_user.vote(@answer, params[:vote]) 
     format.rjs { render :action => "create", :vote => @vote } 
     format.html { redirect_to root_url } 
    else 
     format.rjs { render :action => "error" } 
     format.html { render :action => "new" } 
     format.xml { render :xml => @vote.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

answer.html.erb : (여기 두 가지 방법이 작품의도)

여기 내 코드입니다
<span id="vote_form" style="float: right;"> 
    <%= link_to "Vote up", :url => vote_up_answer_path(answer) %> 
/
    <%= link_to_remote "Down", : 
    url => user_answer_votes_path(answer.user, answer, :vote => :false, :format => :rjs), :method => :post 
    %> 
</span> 

<span id="<%= answer.id %>_vote_score" class="vote_score"> 
    <%= answer.votes_for - answer.votes_against %> 
</span> 

routes.rb :

map.resources :users, :member => { :suspend => :put, :unsuspend => :put, :purge => :delete } do |user| 
    user.resources :votes 
    user.resources :answers do |answer| 
    answer.resources :votes 
    end 
end 
map.resources :answers, :has_many => :votes, :member => {:vote_up => :post, :vote_down => :post} 

레일 2.3.5를 사용하고 있습니다.

누구에게 의견이 있습니까? 나는 옛날 수제 투표 시스템으로 돌아 가야 하나? 들어 본 적이없는 또 다른 투표 플러그인 또는 메소드가 있습니까?

+0

Vote_fu가 좋습니다. 특히 무엇이 작동하지 않습니까? – Jonathan

+0

나에게도 좋은 것처럼 보입니다! 그래서 나는 정말로 그것을 얻고 싶다! 내 link_to 인터페이스가 작동하지 않는 것 같습니다 ... 클릭하면 투표를 추가하지 않습니다. 또한, 내가 U = User.first A = Answer.last u.votes_for (가) 내가 같은 오류가 발생 을 시도 콘솔에서 "알 수없는 속성 : 유권자"... 내가 해요 이 문제를 해결하는 방법을 모릅니다. – goddamnyouryan

답변

1

첫 번째 단계는 콘솔을 통해 작동하도록하는 것입니다. 귀하의 의견에 마지막으로 오류가 발생했을 때 귀하의 모델이 올바르게 설정되지 않은 것 같습니다. 그런 다음 콘솔에서 이것을 시도, 당신의 DB에 rake:migrate를 적용했는지 확인하십시오, 또한

#In User.rb 
acts_as_voter 

#In Answer 
acts_as_votable 

: 당신의 User 모델에서 다음을해야 내가 과거에이 사용

u = User.first 
a = Answer.last 
u.votes_for(a) 

다음과 같은 컨트롤러 동작이 있습니다.

def vote 
    @question = Question.find(params[:id]) 
    if params[:vote] == 'up'  
    current_user.vote_for(@question) 
    elsif params[:vote] == 'down'  
    current_user.vote_against(@question) 
    end 
    redirect_to @question 
end 
0

jt로 답변을하면 도움이되었습니다. 내 컨트롤러에는 vote_for 메서드가 없습니다. 나는 그들이 문서에 그것을 추가해야한다고 생각한다.

def vote 
    @question = Question.find(params[:id]) 
    if params[:vote] == 'up'  
     current_user.vote_for(@question) 
    elsif params[:vote] == 'down'  
     current_user.vote_against(@question) 
    end 
    redirect_to @question 
    end