2013-07-10 2 views
3

안녕 내가 중첩 된 형태의 플러그인을 사용하고 3. 기본적으로 내 모델은 다음과 같습니다 레일 4 대신 레일 작동 만들려고 노력 해요 :레일 4 중첩 된 형태의 문제

has_many :item, :dependent => :destroy 

accepts_nested_attributes_for :item, :reject_if => lambda { |a| a[:item].blank? }, :allow_destroy => true 

을 내보기처럼 보인다 이 :

<%= nested_form_for(@store) do |f| %> 
    <%= f.fields_for :item do |item_form| %> 
    <%= item_form.text_field :name %> 
    <%= item_form.link_to_remove "Remove this item" %> 
    <% end %> 
<% end %> 

이 작품 (프리젠 테이션의 관점에서 - 추가 및 삭제 필드를 당신이 할 수 있어야처럼 수 있습니다)하지만 항목 이름을 저장하지 않습니다.

나는 (이 보호 된 속성의 /의 PARAMS 있습니다) 내 컨트롤러에이 시도 :

def store_params 
    params.require(:store).permit(:name, :owner, :description,:url, :user, item_attributes) 
end 

하지만 여전히 함께 제공 : 모든 도움을

Unpermitted parameters: item_attributes 

감사합니다!

+0

아마도 항목의 필드도 허용해야합니다. – 1andsock

+0

이것이 문제와 관련이 있는지 확실하지 않지만 nested_form gem이 Rails 4를 명시 적으로 지원하지는 않습니다. – depa

+0

대신 [cocoon] (https://github.com/nathanvda/cocoon) gem을 사용해보십시오. 그것은 조금 더 업데이트 되었기 때문에 Rails 4.0과 함께가는 좋은 방법 인 것 같습니다. – mjnissim

답변

5

항목의 필드 (이름 등)도 허용해야합니다.

그래서이 시도 :이 같은 ID :

def store_params 
    params.require(:store).permit(:name, :owner, :description,:url, :user, item_attributes: [:name]) 
end 
+0

그 덕분에 정말 좋았어! –

5

때때로 당신은 지정해야 내가 지난 주에 있었던 유사한 경우

def store_params 
    params.require(:store).permit(:name, :owner, :description,:url, :user, item_attributes: [:id, :name]) 
end 

을의 지정하지 : ID를 만든 레일 4 기존 엔티티를 갱신하는 대신 새 엔티티를 작성하십시오.

+2

이것은. 추가 : id는 모든 제출시 목록을 곱하지 않도록 수정했습니다. 중첩 된 양식을 올바르게 삭제하려면 _destroy도 추가해야했습니다. 허락을받지 않고 전체 _attributes를 허용하는 방법이 있는지 궁금합니다. –