2011-02-15 101 views
1

我創建嵌套資源Foo和Bar其中foo的has_many酒吧和酒吧belongs_to的富Rails 3中嵌套的資源控制方法不跑

這是BarsController新方法:

def new 
    @foo = Foo.find(params[:foo_id]) 
    @bar = @foo.bars.build 
end 

這是酒吧新視圖代碼:

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

當我嘗試加載「新開的酒吧」頁面,導軌說,MODEL_NAME方法不能用於值無發現。奇怪的是,這個稍微修改視圖代碼的工作:

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

然而,當我把logger.debug聲明BarsController新的方法中,它從來沒有運行。耙路徑表示並且服務器日誌證實BarsController#new是被調用的操作,但爲什麼新操作中的代碼不運行?我在這裏錯過了什麼嗎?

+0

如果您嘗試使用f.fields_for,該怎麼辦? – 2011-02-15 00:48:35

+0

你的帖子的第二行:應該是FoosController不是BarsController,不是? – 2011-02-15 00:54:03

回答

1

你可以把作出一些改變它的工作:

  1. 酒吧嵌套在美孚的不是相反,所以不是BarsController你應該寫你的新動作你FoosController裏面如下:

    def new 
        @foo = Foo.new 
        @bar = @foo.bars.build 
    end 
    
  2. 內,您的富模型,你應該有:

    accepts_nested_attributes_for :bars

  3. 您的看法:

    <%= form_for @foo do |f| %> 
        <%= f.fields_for :bars do |ff| %> 
        <%= ff.text_field :name %> 
        <%= f.submit %> 
    <% end %> 
    
  4. 不要忘記你的FoosController內創建行動:

FoosController

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

最後,要注意寫的驗證在你的模特里!例如,您的表單有可能需要某些字段(您在測試期間忘記填寫的字段)!最近發生在我身上!