2011-04-11 4 views
0

레일에서 루비에 Thumb_Up gem을 사용하고 있습니다. https://github.com/brady8/thumbs_upRails 3 gem 메서드를 사용하여 데이터베이스 모델을 어떻게 업데이트합니까?

사용자가 게시물에 투표 할 수 있기를 바랍니다. 그러나 사용자가 각 게시물 옆에있는 버튼을 클릭하고 데이터베이스에 투표를 추가하도록 허용하는 방법을 알 수 없습니다.

나는 다음과 같은 일을 통해이 레일 콘솔에서 일어날 얻을 수 있습니다 : 나는 버튼이보기를 클릭하면이 일이 얻을 수있는 방법

그러나
u=User.first 

m=Micropost.first 

u.vote_for(m) 

. 아약스를 사용해야한다고 가정하고 있지만이 작업을 수행하기 위해 내가 게시해야하는 URL을 어떻게 알 수 있습니까?

도움을 주시면 감사하겠습니다.

업데이트 : 도움을

정말 고마워요! 아래 코드에 여전히 문제가 있습니다.

<%= link_to('vote for this post!', vote_micropost_path(@micropost), :method => :post) %> 

컨트롤러 : 그러나

def vote 
    @micropost = Micropost.find(params[:id]) 
    current_user.vote_for @micropost 

    # This assumes you'll only call it via AJAX. 
    # If your ajax call doesn't return "ok", then you know something went wrong 
    render :text => 'ok', :layout => false 
end 

, 난 아직이 오류를 받고 있어요 : 없음 경로 일치 {여기

내 routes.rb

resources :microposts do 
    post :vote, :on => :member 
end 

보기입니다 : controller => "microposts", : id => #, : action => "vote"}

경로가 정확히 일치하지 않는 이유를 아는 사람이 있습니까?

+0

예, 조금 더 명확합니다. 당신의 견해처럼 보이는 @micropost는 실제로 Micropost 레코드로 설정되지 않습니다. _vote_ 작업이 수행하는 것처럼 @micropost를 설정해야하는 렌더링 작업이 무엇이든간에. – bioneuralnet

답변

1

나는 레일즈 3을 가정하고있다. 레일즈 2의 루트는 약간 다르게 보일 것이다.

먼저 config/routes.rb 파일에 경로를 정의해야합니다. 당신은 이것을 여러 가지 방법으로 할 수 있습니다. 이미 microposts에 대한 경로가있는 경우, 당신은 단순히 "투표"조치를 추가 할 수 있습니다

resources :microposts do 
     post :vote, :on => :member 
    end 

(명확성은 "포스트"는 위의 HTTP POST 메서드를 의미하고 Micropost 클래스와는 아무 상관이 없습니다) 그 경로를 사용한다면 Microposts 컨트롤러에 "투표"방법을 만들어 그것을 잡아야합니다. 그것은/microposts/56/투표

과 같을 것이다

vote_micropost_path(@micropost) 

: (내가 준 예 경로를 가정)보기의 AJAX POST 호출에서 다음

def vote 
     @post = Micropost.find(params[:id]) 
     current_user.vote_for @post 

     # This assumes you'll only call it via AJAX. 
     # If your ajax call doesn't return "ok", then you know something went wrong 
     render :text => 'ok', :layout => false 
    end 

같은 것을, 당신과 함께 URL을 얻을 것

+0

내 의견으로는이 link_to를 사용하고 있습니다. ** bold ** <% = link_to ('이 게시물에 투표하십시오!', vote_micropost_path (@micropost), : method => : 게시물) %> ** bold **.이 오류가 계속 발생합니다. {: controller => "microposts", id => # , : action => "vote"} 다음은 내가 나의 경로에도 사용했던 것이다 : resources : microposts, : only => [: create, : destroy] do \t 게시물 : vote, : on => 회원 끝 도움 주셔서 대단히 감사합니다. – chris

+0

경로가 정상적으로 보입니다. @micropost가 당신이 투표하고 싶은 Micropost 객체로 설정되어 있다고 가정하고 있습니까? 데이터베이스에 실제로없는 새로운 Micropost 개체 인 것처럼 보입니다. – bioneuralnet

+0

컨트롤러에서 이것을 사용하여 현재 마이크로 포스트를 가져 왔습니다. @micropost = Micropost.find (params [: id]) 클릭 한 ID에 어떻게 든 전달해야합니까? 어떻게 그런 일을 할 수 있겠습니까? 아니면 더 쉬운 트릭이 있습니까? – chris

관련 문제