2012-08-29 2 views
0

내 앱에서 사용자는 제품 리뷰를 작성할 수 있습니다. 그러나 검토를 게시하기 전에 관리자는 검토를 수락하거나 거부해야합니다 (사용자가 검토를 변경할 수 있음).레일 : 댓글 확인 경로 만들기 (수락 또는 거부)

유효성 검사 부분을 관리하기 위해 메서드를 Reviews 컨트롤러 안에 만들었습니다. 관리자는 새로운 리뷰 근처에 두 개의 버튼 (링크)을 가지고 있습니다 : Accep, Reject. 해당 버튼은 validate#reviews으로 리디렉션되고 적절한 매개 변수 인 review_idadmin_action (허용 또는 거부)을 보냅니다.

어떻게하면 단추 (링크)의 경로를 만들 수 있습니까?

link_to "accept", polymorphic_path([review, :validate => 'accep'])과 같은 많은 조합을 시도했지만 성공하지 못했습니다. URL이 어떻게 보이는지 파악하는 데 어려움이 있습니다! 물론, 이전에 routes.rb에 get 'reviews/validate'을 추가했습니다.

비슷한 상황에 처했을 때 어떻게 했습니까? 모범 사례가 있습니까?

업데이트

또한 link_to "Accept", polymorphic_path(:reviews => review, :validate => 'accept')을 시도했지만 제공 무기 호 위치를 얻는다. URI를 만들 수 없습니다.

업데이트 2

내가 관리자 인증을 확인, 검토를 받고 같은 일반적인 데이터 처리가 있기 때문에 (대신 두 가지 방법 acceptreject을 만드는)을 validate 방법을 사용하고 싶습니다 ...

그래서, 내 컨트롤러, 내가 좋아하는 뭔가를 찾고 있어요 : 사전에

def activate 
    # Get review, using review_id 

    # Check in the admin has the right to validate the review 

    # Execute the correct action: accept or reject. 
end 

private 
def accept 
    ... 
end 

def reject 
    ... 
end 

감사합니다.

답변

1

:

resources :reviews do 
    member do 
    put :accept 
    put :reject 
    end 
end 

이 만들 것 URL을 리뷰/: ID/동의 및 리뷰/: ID가 헬퍼 accept_review_path (@review)와 reject_review_path (@review)를 통해 제공 거부합니다.

마지막 것은, 당신의 ReviewsController에 새로운 컨트롤러`validate`를 만들 정말 necassary가

def accept 
    @review = Review.find(params[:id]) 
    # Your accept logic here 
end 

def reject 
    @review = Review.find(params[:id]) 
    # Your reject logic here 
end 
+0

뛰어난 Erez와 감사합니다. 내가 찾던 솔루션입니다. 'accept'와'reject' 메쏘드는 private이어야하기 때문에 한 걸음 더 나아가 야합니다. 내 유일한 진입 점은 테스트를 수행하는 (인증 확인과 같은) teh'validate '메소드이며, 올바른 액션을 실행합니다. 제발, 두 번째 업데이 트를 볼 수 있습니다. – htaidirt

+0

필자는 마침내'link_to "Accept", validate_review_path (리뷰, : type => "accept")'를 링크로 사용하고 컨트롤러에서는'if params [: type] = = '수락'... '. 고마워, Erez. – htaidirt

0

리뷰 컨트롤러에 대한 멤버로 get 메서드를 추가하기 만하면됩니다. 그런 다음 명령 레이크 루트을 주어이 작업의 경로를 찾으십시오. 그런 다음 매개 변수를 사용하여 버튼에 경로를 지정하십시오. 매개 변수는 1이어야합니다. 받아 들여라, 2. 받지 않다. 당신의 routes.rb에서

+0

추가? 나는 단지'validate '가 너무 많은 컨트롤러를 갖지 않기 위해'Review'의 메소드가되기를 원했습니다. 이런 식으로 할 수 있습니까? – htaidirt

+0

당신은 "validate # reviews"로 리다이렉트했다. 그래서 나는 컨트롤러 만 검증한다고 말했다. 나는 당신이 리뷰 컨트롤러를 가지고 있다고 생각하기 때문에 리뷰 컨트롤러에 대해 새로운 멤버 액션 "validate"를 생성하십시오. 그런 다음 accetp에서이 경로를 사용하고 버튼의 링크를 거부하십시오. 단추를 기반으로 매개 변수를 수락 또는 거부로 제공하십시오. – Mohanraj

관련 문제