2013-08-08 3 views
0

그래, strong_params을 설치하기 전에 MyBook.create!을 사용하면 효과가 있지만 지금은 그렇지 않습니다.'어떻게 만드시겠습니까?' strong_params?

는 여기에 내가

@book = MyBook.create!(params.require(:my_book).permit(
      :author_id => @author.id, 
       :user_id => @author.user_id) 
     ) 

을 시도했지만 내가 잘못 뭐하는 거지 Required parameter missing: my_book

을 얻고있다

class AuthorsController < ApplicationController 
    def new 
    @author = user.authors.build 
    end 

    def create 
    @author = Author.new(author_params) 
    if @author.save 
     @book = MyBook.create!(:author_id => @author.id, 
      :user_id => @author.user_id) 
     ) 
    else 
    render :new 
    end 
end 

내 코드입니까? 각 속성을 하나씩 업데이트 할 수는 있지만 효율적이지는 않습니다. 보호 속성을 대량 할당 할 수는 없지만 (strong_params로 인해) 내 모델에 속성을 할당하지 않아도 어떻게 작동하는지 이해할 수 없습니다.

, 그것은처럼 보이는 것입니다 당신은 정말 PARAMS

@book = MyBook.create!(:author_id => @author.id, 
     :user_id => @author.user_id) 
    ) 

는 "대량 할당"방법 PARAMS을 사용한 경우를 사용하지 않는 한,

+2

'@ author' 객체를'.save'하지 않았기 때문에 create가 작동하지 않으므로'id'가 없습니다. – MrYoshiji

+0

대신 @author = Author.create (author_params)를 사용하세요 .MyYoshiji 죄송합니다. 실제로 저자를 저장하고 거기에 포함하는 것을 잊었습니다. 방금 편집했습니다. – goo

답변

1

그래서 전에 사전에 감사합니다

당신이 아이디의 너 자신을 잡아 당겨 때문에
@book = MyBook.create!(params[:book]) 

, 그것은 할 쉽게 :

@book = MyBook.create! do |mybook| 
    mybook.author_id = @author.id 
    mybook.user_id = @author.user_id 
end 
+0

예, 모든 외래 키가 nil로 반환되므로 '@book = MyBook.create! (params [: book])'을 사용할 수 없습니다. 당신의 솔루션은 효과가 있지만 더 좋은 방법이 있는지 궁금해하고 있습니까? 아니면이 솔루션이 괜찮습니까? 고마워 btw – goo

+1

MyBook 내부에서 저자의 중첩 된 속성 (http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html)을 허용해야합니다. MyBook.create! (params [: book]) '모든 것을 다룰 것이다. – paradoja

관련 문제