2011-10-06 62 views
1

我試過了this advice,但我還沒有成功地在一個提交按鈕下生成包含3個相同類型對象的表單。用Rails從一個表單提交多個模型對象

當我瀏覽到應顯示包含3個對象字段的表格(在本例中稱爲元素),我收到以下錯誤頁: undefined method 'elements' for nil:NilClass
任何指針將不勝感激!我的代碼如下:

應用程序/控制器/ elements_controller.rb

class ElementsController < ApplicationController 
    def index 
    @element_group = ElementGroup.new 
    render 'pages/index' 
    end 
end 

應用程序/視圖/頁/ home.html.erb

<%= render 'element_groups/form'%> 

應用程序/意見/element_groups/_form.html.erb

<% form_for :element_group do |f|%> 
    ## The error comes from this next line, as f.object is nil 
    <% f.object.elements.each do |element| %> 
    <% f.fields_for element do |element_form| %> 
     <%= element_form.text_field :content %> 
     <%= element_form.text_field :element_type %> 
     <%= element_form.text_field :subtype %> 
    <% end %> 
    <% end %> 
<% end %> 

應用程序/模型/ element_group.rb

class ElementGroup 
    attr_accessor :elements 

    def elements 
    @elements = [] 
    3.times do 
     @elements << Element.new 
    end 
    @elements 
    end 
end 

應用程序/模型/ element.rb

class Element < ActiveRecord::Base 
    attr_accessible :element_type, :subtype, :content 
end 

DB/schema.rb

create_table "elements", :force => true do |t| 
    t.string "element_type" 
    t.string "subtype" 
    t.string "content" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

回答

0

有無您試圖更改爲<% form_for @element_group do |f|%>

+0

是的。然後,我得到了'NilClass:Class'的'undefined method'model_name'(源自element_groups/_form.html.erb的第1行)我相信這是由於element_group.rb模型中的ElementGroup類不是從ActiveRecord :: Base繼承的: 但我只是想創建一個「fascade」模型,這只是用於處理一組其他模型作爲[這個答案提到](http://stackoverflow.com/questions/972857/multiple-objects-in-a-rails -形成)。你認爲這是可能的嗎? – AJP

+0

這是真的我沒有注意到你沒有從'ActiveRecord :: Base'繼承。你提到的答案是垃圾。最簡單的方法是遵循[this railscast](http://railscasts.com/episodes/196-nested-model-form-part-1)。希望我幫助。 – Gerry