2013-06-04 4 views
3

레일 4에서 컨트롤러의 URL에서 매개 변수를 가져 오는 데 문제가 있습니다.Ruby on Rails : URL에서 매개 변수 얻기

has_many 및 belongs_to 연관이있는 두 개의 모델이 있는데, Books 및 Pages라고 부르기로합니다. 나는 새로운 페이지 레코드를 만들고 사용자가 "Create"버튼을 클릭했을 때 방문한 책 (즉, 사용자가 Jurassic Park 책 페이지에 있었고 "Create, "나는 쥬라기 공원 책과 관련된 새로운 페이지를 만들고 싶다. 여기

은 내 시야에서 링크를 만들 수 있습니다 :

"ActiveRecord::RecordNotFound in PagesController#create - Couldn't find Book without an ID"

나는 완전히이 일을 오전 : 나는 다음과 같은 오류가

def new 
    @page = Page.new 
end 

def create 
    @book = Book.find(params[:book]) 
    @page = Product.new(page_params) 
    @page.book_id = @book.id 
    if @page.save 
    flash[:success] = "Page Submitted!" 
    redirect_to @book 
    else 
    render 'new' 
    end 
end 

: 여기

<%= link_to "Create page", new_page_path(:book => @book.id), :id => "submit-button" %> 

내 컨트롤러 잘못된? Rails 4가 URL 매개 변수를 가져 오는 것과 동일한 구문 인 params의 작동 방식을 변경 했으므로이 문제를 일으키는 원인이 될 수 있습니다.

편집 : 변수로 '새'매개 변수를 가져 와서 그 ID로 사용하려고했지만 동일한 오류 메시지가 나타납니다.

+0

안녕 :

<%= link_to "Create page", new_page_path(:id => @book.id), :id => "submit-button" %> 

그런 다음에 방법을 만들려면을 업데이트합니다. Rails4에서는 strong_parameters가 기본값입니다. 그래서 당신은 URL이나 폼에서 얻은 모든 매개 변수를 허가해야합니다. 귀하의 경우에는 'book_params'가 있어야하며이 book_params는 find와 함께 사용할 수 있습니다. [: 책] .permit (: 아이디, 이름) end' – Zoltan

+0

'@book = Book.find (book_params은)''에서 는 가'데프 PARAMS을 book_params 컨트롤러에 private' – Zoltan

답변

0

new_page_path는 GET 인 'new'액션을 호출합니다. 예상대로 '작성'작업을 호출하지 않습니다. 이상적으로 '생성'작업을 호출하고 싶습니다. 시도해보십시오 :

button_to 'Create Page', pages_path(:book => @book.id), :method => :post 

link_to는 일반적으로 GET 작업만을 가리켜 야합니다. 그런 것들을 위해 button_to를 사용하는 것이 바람직합니다. (: ID를 대신 : 책 주) :

0

난 당신이 찾고있는 생각

def create 
    @book = Book.find(params[:id]) 
    ... 
end 
관련 문제