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
是的。然后,我得到了'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
这是真的我没有注意到你没有从'ActiveRecord :: Base'继承。你提到的答案是垃圾。最简单的方法是遵循[this railscast](http://railscasts.com/episodes/196-nested-model-form-part-1)。希望我帮助。 – Gerry