Ruby on rails 如何在Rails 3.2中设置深度嵌套表单
我试图在rails中构建一个相当复杂的嵌套表单,但我被卡住了 基本上,我有三个模型-申请者、数据点、申请者数据点值 用户可以创建一个新的数据点,给它一个名称,性别等。选择它的类型字符串,整数等。。该类型确定数据最终将保存在AppliantDataPointValue表中的哪一列 然后,我希望用户在创建新申请者时,能够将每个数据点的值添加到applicationDataPointValue表中 我的模型如下所示: 申请人:Ruby on rails 如何在Rails 3.2中设置深度嵌套表单,ruby-on-rails,ruby-on-rails-3,activerecord,nested-forms,nested-attributes,Ruby On Rails,Ruby On Rails 3,Activerecord,Nested Forms,Nested Attributes,我试图在rails中构建一个相当复杂的嵌套表单,但我被卡住了 基本上,我有三个模型-申请者、数据点、申请者数据点值 用户可以创建一个新的数据点,给它一个名称,性别等。选择它的类型字符串,整数等。。该类型确定数据最终将保存在AppliantDataPointValue表中的哪一列 然后,我希望用户在创建新申请者时,能够将每个数据点的值添加到applicationDataPointValue表中 我的模型如下所示: 申请人: class Applicant < ActiveRecord::Ba
class Applicant < ActiveRecord::Base
has_many :applicant_data_point_values, dependent: :destroy
has_many :data_points, :through => :applicant_data_point_values
accepts_nested_attributes_for :data_points
accepts_nested_attributes_for :applicant_data_point_values
attr_accessible :data_points_attributes, :applicant_data_point_values_attributes
end
数据点:
class DataPoint < ActiveRecord::Base
has_many :applicant_data_point_values
has_many :applicants, :through => :applicant_data_point_values
accepts_nested_attributes_for :applicant_data_point_values
end
应用程序数据点值:
class ApplicantDataPointValue < ActiveRecord::Base
belongs_to :data_point
belongs_to :applicant
end
但是我不知道在我的控制器的“新建”和“创建”部分应该做什么,也不知道如何构造表单
如果您有任何见解,我将不胜感激。据我所知,用户的表单还将包含多个AppliantDataPointValue字段。但是这个表单不允许创建新的数据点字段,对吗 在“控制器新操作”中,您需要使用关联的数据点值设置模型:
def new
@user = User.new
DataPoint.all.each do |data_point|
applicant_data_point_value = @user.applicant_data_point_values.build
applicant_data_point_value.data_point = data_point
end
end
然后,为每个数据点值显示一个文本框
<%= form_for @user do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<% @user.applicant_data_point_values.each do |data_point_value| %>
<%= f.fields_for :applicant_data_point_values, data_point_value do |fields| %>
<%= fields.label :value, data_point_value.data_point.type %>
<%= fields.text_field :value %>
<% end %>
<% end %>
参考资料:Fiona,谢谢。这似乎朝着正确的方向发展。但是,我需要将结果保存到AppliantDataPointValues表中正确的列string、integer等中,因此必须在我的表单中包含一组IF语句,这些语句根据数据类型呈现正确的字段文本等。但是,当我单击“保存”时,表单不会保存,我得到了第一个IF的nil:NilClass的ActionView::Template::Error undefined方法“data\u point\u type”。有什么想法吗?:也就是说,我是否需要向控制器的“创建”部分添加一些内容?或者我是否应该在AppliantDataPointValue列中处理将值保存在哪一列的决策?您能告诉我您的创建方法吗?只有在模型失败的情况下,它才应该尝试重新渲染表单,这是一个单独的问题。签出。`def create@applicator=applicator.newparams[:applicator]response_to do | format |如果@applicator.save format.html{重定向至@applicator,注意:'申请人已成功创建。}format.json{render json:@applicator,status::created,location:@applicator}else format.html{render action:new}format.json{render json:@applicator.errors,status::unprocessable_entity}end`