2013-04-27 1 views
0

내보기에서 각 투표 값 (1-4 개)에 대한 투표 수를 그래프로 나타내고 내 컨트롤러에 계산 방법이 있습니다 득표 수 (행)행 수를 계산하는 레일즈 메서드는 "잘못된 인수 수 (0에 대해 2)"를 반환합니다.

내 컨트롤러 (/app/controllers/entry_controller.rb) :

before_filter :count_votes, :only => :track 

... 

protected 
def count_votes(value, id) 
    Vote.where(:value => value, :entry_id => id).count 
end 

내보기 (/app/views/entries/track.html.erb) :

{ amount: '1', value: <%= count_votes(1, @entry.id) %>}, 

그러나 레일 나에게 줘

ArgumentError in EntriesController#track: wrong number of arguments (0 for 2) 

나는 2 개의 값 (1과 @ entry.id)을 보내고있다. 내 방식을 작동 시키려면 어떻게해야합니까?

모든 도움을 주실 수 있습니다.

당신은 필터 이전과 같이 사용하는 방법 #count_votes을 가지고 : 나는 다시 읽을 때

+0

내 생각에 'count_votes'가 아니라'track' 메소드에 오류가 지정되어 있습니다. – MBO

+0

@MBO 그게 이상한 일이야. 그것은 #track에 전혀 없습니다 –

+0

count_votes 메서드는 2 개의 매개 변수를 필요로하며 필터 전에 호출하면 인수가 전달되지 않습니다 –

답변

2

좋아, 아니 당신은 저를 쓰다 두 번째 질문. 그러나 필터가 작동하기 전에 메서드를 사용하면 매개 변수를 얻을 수 없습니다. 필터는 params (@current_user을 가져오고 을 기준으로 @user을 가져 오거나 가져 오기) 또는 현재 요청이 유효한지 확인합니다. 사용자가이 방법에 액세스 할 수있는 권한이 있는지 확인합니다 (일부 인증 라이브러리를 기반으로하거나 플래그, 레코드를 사용할 수 있는지 확인하십시오.)

필터를 사용하기 전에 작업을 수행하기위한 필수 조건으로 사용하거나이 작업에 액세스 할 수 있어야하고 그렇지 않은 경우 조건부 테스트로 사용해야합니다. 당신의 예에서 이것도 존재하지 않습니다.

http://guides.rubyonrails.org/action_controller_overview.html#filters을 살펴보십시오.

+0

Ah. 대신 이걸 어떻게 수행 할 것을 제안합니까? –

+0

@ColbyAley이 방법으로 무엇을하고 싶습니까? 그것은 그것이 fiter 전에 있어야하기 위해 정말로 필요합니까? 정말 ** 필터 **인가요? – MBO

+0

당신 말이 맞아요. 필터 여야합니다. 어떤 이유로 필터에서 ActiveRecord를 사용할 수 없다는 인상하에있었습니다. 당신의 도움을 주셔서 감사합니다. –

0

before_filter 호출에 적절한 매개 변수를 전달해야합니다.

before_filter { |c| c.count_votes 1, @entry.id } 
관련 문제