在我的博客应用程序中,我有一个post模型(name:string, body:text)。我希望允许用户定义一个custom_field (模型有名称:string)。这将导致post表单包含该custom_field的text_field,该字段的值应作为param从create或update返回。返回的实际数据为模型custom_field_instance (值:string custom_field:references post:references)
例如,如果用户创建了一个名为 author 的自定义字段,以及另一个具有name email 的自定义字段,那么我希望post表单显示一个作者和电子邮件文本字段,并返回两个自定义字段实例(一个用于作者,一个用于电子邮件)。
自定义字段在表单中显示得很好,没有问题。当有一个自定义字段时,params看起来也很好。
问题是,在params中只发送一个自定义字段的params。如果有多个字段,那么只发送最后一个字段的数据。
假设我有一个作者和电子邮件自定义字段,在新的post表单中,我将名称设置为'John Doe‘,将电子邮件设置为'john@example.com',下面是我在params中得到的内容(只有一个自定义字段实例,即电子邮件实例,这是最后一个实例):
Parameters: 
{..., "post"=>{"title"=>"post2", ...}, 
  "custom_field_instances"=>
     {"value"=>"john@example.com", "custom_field_id"=>[email_custom_field_id]}, 
"commit"=>"Create Post"}下面是我希望在params中看到的内容(两个自定义字段实例):
Parameters: 
{..., "post"=>{"title"=>"post2", ...}, 
  "custom_field_instances"=> 
     {"value"=>"John Doe", "custom_field_id"=>[author_custom_field_id]},   
     {"value"=>"john@example.com", "custom_field_id"=>[email_custom_field_id]}, 
"commit"=>"Create Post"}下面是我到目前为止掌握的代码:
posts_controller.rb:
def new
  @post = Post.new
  @custom_fields = CustomField.all
endviews/posts/new.html.erb:
<%= form_for @post,... %>
...
<% @custom_fields.each do |custom_field| %>
    <% @custom_field_instance = CustomFieldInstance.new %>
    <%= fields_for :custom_field_instances, @custom_field_instance do |custom_field_instance_fields| %>
        <%= custom_field_instance_fields.label custom_field.name %>
        <%= custom_field_instance_fields.text_field :value %>       
        <%= custom_field_instance_fields.hidden_field :custom_field_id, value: custom_field.id %>
    <% end %> <!-- end of fields_for block  -->
  <% end %> <!-- end of custom_fields.each loop  -->
...
<% end %> <!-- end of form_for block  -->我也尝试过在没有@custom_field_instance的情况下,fields_for行变成了<%= fields_for :custom_field_instances do |custom_field_instance_fields| %>,但是它没有改变任何东西(仍然是最后一个自定义字段实例是在params中发送的唯一一个实例)。
Update 1:我也尝试使用accepts_nested_attributes_for,但是视图没有显示自定义字段文本字段,因为似乎nested_attributes只用于关联模型的现有实例。这些变化是:
在上面的代码中,我向item_instance.rb,添加了accepts_nested_attributes_for :custom_field_instances,在上面的视图代码中,用post_form.fields_for ...替换了fields_for ...。
发布于 2014-11-29 08:03:36
把它做成一个Array
还没测试过。
try1:
<%= custom_field_instance_fields.text_field, name: 'value[]' %>或
<%= custom_field_instance_fields.text_field, 'value[]' %>隐藏的领域也是如此。
try2: (为OP工作)
使用{:multiple => true}
try3:
serialize :name, Array在CustomFieldInstance模型中
https://stackoverflow.com/questions/27199703
复制相似问题