2011-02-15 11 views
1

내가 푸레일 3 컨트롤러 방법은

belongs_to 푸 has_many 바, 바

이 BarsController의 새로운 방법으로 중첩 된 자원 푸와 줄을 만드는거야 실행되지 않습니다

<%= form_for([@foo, @bar]) do |f| %> 
    <%= f.text_field :name %> 
    <%= f.submit "Save" %> 
<% end %> 

나는 "새 줄"페이지를로드하려고하면 MODEL_NAME 방법은 nil 값에 대한 찾을 수 없음을 말한다 레일 :이 줄 새로운 뷰의 코드입니다. 호기심이 약간 수정보기 코드가 작동합니다

<%= form_for([@foo, @foo.bars.build]) do |f| %> 
    <%= f.text_field :name %> 
    <%= f.submit "Save" %> 
<% end %> 

을 그러나, 나는 BarsController의 새로운 방법 내부 logger.debug 문을 넣을 때, 그것은 실행되지 않습니다. 레이크 라우트가 말하고 서버 로그는 BarsController # new가 호출되는 액션이지만 새 액션 안에있는 코드가 실행되지 않는 이유를 확인합니다. 내가 여기서 뭔가를 놓치고 있니? 당신이하게 만들 수

+0

대신 f.fields_for를 사용하려고하면 어떻게됩니까? –

+0

게시물의 두 번째 줄 : BoseController가 아닌 FoosController 여야합니다. –

+0

'new' 액션에 도달하지 못하게하는'before_filters'가 있습니까? – zetetic

답변

1

일부 변경은 작동 :

def new 
    @foo = Foo.new 
    @bar = @foo.bars.build 
end 
:

  1. 바는 당신이 다음과 같이 당신의 FoosController 안에 새 조치를 작성해야하지 반대, 그래서 대신 BarsController의 푸에 중첩됩니다 당신의 foo는 모델 내부

  2. , 당신은해야합니다

    accepts_nested_attributes_for :bars

  3. 로보기 :

FoosController 마지막으로

def create  
     @foo = Foo.new(params[:foo]) 
     if @foo.save 
      redirect_to @foo 
     else 
      render :new 
     end 
    end 

기록 검증에주의 :

<%= form_for @foo do |f| %> 
    <%= f.fields_for :bars do |ff| %> 
    <%= ff.text_field :name %> 
    <%= f.submit %> 
<% end %> 
  • 이 FoosController 내부의 생성 작용을 잊지 마세요 당신의 모델에서! 예를 들어 양식이 유효하기 위해 일부 필드 (테스트 도중 채워 넣으 려하지 않은 필드)가 필요할 수도 있습니다. 최근에 저에게 일어났습니다!

  • +0

    나는 이것을 시험해 볼 것이지만, 기존 Foos에 Bars를 추가 할 수 있기를 바란다. BarsController에서이를 수행해야 할 필요가있다. – jshou

    +1

    사실 Foo 모델이 Bars에 대해 _nested_attributes를 수락하면 Foo # 편집 작업 내에 새 막대가 추가됩니다. 나는이 두 부분 시리즈를 지켜 볼 것을 제안 할 것이다 : http://railscasts.com/episodes/196-nested-model-form-part-1 –

    관련 문제