2014-06-05 4 views
1

나는 이와 같이 링크 된 학교에 대한 리뷰 페이지가 있습니다.매개 변수가 첨부 된 이전 페이지로 리디렉션

<%= school_reviews_path(school_id: @school.id) %> 

이와 같은 링크를 생성하십시오.

그러나
http://address.com/school_reviews?school_id=1 

는 리뷰에서 검토 작성 후 내가 첨부 된 매개 변수 school_id=1

을 즉있는 페이지를 다시 쓰게하려면,

그러나 그것을 schools_reviews controllercreate 조치를 게시 새로운 검토를 만드는 형태입니다

이렇게 여러 가지 방법을 시도했지만 작동하지 않고 http://address.com/school_reviews으로 리디렉션했습니다. 매개 변수없이 올바른 정보를 가져 오지 못했습니다.

def create 
    @review = SchoolReview.new(params[:review]) 

    respond_to do |format| 
     if @review.save   
     format.html { redirect_to school_reviews_path(:school_id => @review.school_id) } 
     format.json { head :no_content } 
     else 
     format.html { redirect_to school_reviews_path(:school_id => @review.school_id) } 
     format.json { head :no_content } 
     end 
    end 
    end 

어떤 아이디어라도 유용 할 것입니다.

+1

* 작동하지 않습니다. *. 그럼 어떻게 될까요? 관용적이지는 않지만 중첩 된 경로를 사용해야하므로 정확합니다. –

+0

@ MaurícioLinhares, 나는 질문을 개선했다. – Acacia

+0

위 내용에 동의하십시오. 레일스와 같이 더 RESTful 한 방향으로 나아가면 자신을 많이 아끼지 않을 것입니다. 아마도/schools/1/reviews와 같은 URL을 원할 것입니다. 새 리뷰를 작성하는 양식은/schools/1/reviews/create에 POST가되고, 저장은/schools/1/reviews로 리디렉션됩니다.이 모든 것은 중첩 된 자원 패턴을 따르는 데 필요한 코드 대체없이 발생합니다 . 희망이 도움이됩니다. 자세한 정보 : http://guides.rubyonrails.org/routing.html#nested-resources – GoGoCarl

답변

0

문제는 여기에 양식이 가장 가능성이 어디 학교 ID를 설정하지 않는, 그래서 당신의 코드가 더 그것이 있어야 무엇처럼 만들어 보자 있다는 것입니다,이 같은 첫 설치 경로 :

resources :schools do 
    resources :school_reviews 
end 

귀하의 컨트롤러 이름은 변경되지 않지만, 다음과 같이 구현으로 변경됩니다 :

class SchoolReviewsController < ApplicationController 

    before_filter :load_school 

    def create 
    @review = @school.school_reviews.build(params[:review]) 

    respond_to do |format| 
     if @review.save   
     format.html { redirect_to school_school_reviews_path(@school) } 
     format.json { head :no_content } 
     else 
     format.html { redirect_to school_school_reviews_path(@school) } 
     format.json { head :no_content } 
     end 
    end 
    end 

    protected 

    def load_school 
    @school = School.find(params[:school_id]) 
    end 

end 

또한 같은 것으로보기에 form_for 전화를 변경해야합니다 :

또한의 URL에서 school_school_을 제거하기 위해 단지 ReviewSchoolReview 모델을 변경할 수 있습니다

<%= school_school_reviews_path(@school) %> 

:

<%= form_for([@school, @review]) do |f| %> 
    Your form content here. 
<% end %> 

귀하의 링크로도 변경됩니다.

그리고 언제나처럼 routes에 관한 문서를 읽고 무슨 일이 일어나고 있는지 이해하십시오.

관련 문제