1

내 두 모델 매스 할당을 사용 :씨 has_many 관계 여기

class Article < ActiveRecord::Base 
    attr_accessible :content 
    has_many :comments 
end 

class Comment < ActiveRecord::Base 
    attr_accessible :content 
    belongs_to :article 
end 

그리고 나는이 코드를 사용하여 seed.rb에서 데이터베이스를 시드하기 위해 노력하고있어 : 그러나 DB를 긁어

Article.create(
    [{ 
     content: "Hi! This is my first article!", 
     comments: [{content: "It sucks"}, {content: "Best article ever!"}] 
    }], 
    without_protection: true) 

를 : 시드가 다음 오류 메시지를 표시합니다.

rake aborted! 
Comment(#28467560) expected, got Hash(#13868840) 

Tasks: TOP => db:seed 
(See full trace by running task with --trace) 

이렇게 데이터베이스를 시드 할 수 있습니까?

그렇다면 후속 질문 : 검색 한 결과 중 일부가 이러한 유형의 중첩 할당을 수행하는 것으로 보입니다. 할당하려는 속성에 'accepts_nested_attributes_for'를 추가해야합니다. (아마도 Comment 모델에 대해 'accepts_nested_attributes_for : article'과 같은 것일 수도 있습니다.)

'without_protection : true'와 비슷한 방법이 있습니까? 왜냐하면 나는 데이터베이스를 파종 할 때만 이런 종류의 질량 지정을 받아들이기를 원하기 때문입니다.

답변

4

이 오류가 표시되는 이유는 관련 모델을 다른 모델 (@ article.comment = comment에서와 같이)에 할당 할 때 오른쪽이 실제 객체이고 해시는 아닌 것으로 예상된다는 것입니다. 오브젝트의 속성 당신이 코멘트에 대한 매개 변수를 전달하여 기사를 작성하려는 경우

, 당신은 문서 모델 accepts_nested_attributes_for :comments을 포함하고 attr_accesible 목록에 :comments_attributes를 추가해야합니다.

위에서 작성한 내용을 허용해야합니다.

조건부 대량 할당이 가능하다고 생각하지 않습니다. 이는 설계상의 관점에서 보안을 손상시킬 수 있습니다.

편집 : 당신은 또한 의견을 변경해야합니다 : [{content: "It sucks"}, {content: "Best article ever!"}] 감사

+0

comments_attributes: [{content: "It sucks"}, {content: "Best article ever!"}]에, 그것은 작동합니다. 유일한 문제는 "without_protection : true"가 더 이상 필요하지 않다는 것입니다. 나는 데이터베이스를 시드하는 것이 더 편리하도록 모델의 더 많은 것을 노출하는 것을 정말로 좋아하지 않는다 :/ – rnd

+0

여기서 노출하는 유일한 새로운 속성은 comment_attributes이며, 이것들은 Comment 모델로 전달되기 때문에 (액세스 할 수있는 유일한 속성은 content입니다), 실제로는 이전보다 더 많은 모델을 노출하지 않습니다. – cdesrosiers

+0

즉, comments_attributes는 실제로 모델의 일부가 아니라 모델 속성의 해시입니다. 어쨌든 액세스 할 수 있습니다. – cdesrosiers

관련 문제