首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将用户定义的自定义字段添加到模型中?

如何将用户定义的自定义字段添加到模型中?
EN

Stack Overflow用户
提问于 2014-11-29 06:48:42
回答 1查看 816关注 0票数 1

在我的博客应用程序中,我有一个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中得到的内容(只有一个自定义字段实例,即电子邮件实例,这是最后一个实例):

代码语言:javascript
运行
复制
Parameters: 
{..., "post"=>{"title"=>"post2", ...}, 
  "custom_field_instances"=>
     {"value"=>"john@example.com", "custom_field_id"=>[email_custom_field_id]}, 
"commit"=>"Create Post"}

下面是我希望在params中看到的内容(两个自定义字段实例):

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
def new
  @post = Post.new
  @custom_fields = CustomField.all
end

views/posts/new.html.erb:

代码语言:javascript
运行
复制
<%= 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 ...

EN

Stack Overflow用户

回答已采纳

发布于 2014-11-29 08:03:36

把它做成一个Array

还没测试过。

try1:

代码语言:javascript
运行
复制
<%= custom_field_instance_fields.text_field, name: 'value[]' %>

代码语言:javascript
运行
复制
<%= custom_field_instance_fields.text_field, 'value[]' %>

隐藏的领域也是如此。

try2: (为OP工作)

使用{:multiple => true}

try3:

代码语言:javascript
运行
复制
serialize :name, Array

CustomFieldInstance模型中

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27199703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档