非ActiveRecord嵌套模型表单不采用模型值

时间:2015-02-19 21:41:57

标签: ruby-on-rails

我正在使用Rails'form_forfields_for来获取模型所具有的嵌套json属性的表单,但是在编辑时我没有获得该值,并且必须手动设置值:

<%= f.fields_for :json do |ff| %>
    <%= ff.text_field :attr, value: @app_configuration.json.attr %>
<% end%>

为了让我的json attr可读,我在我的控制器上执行此操作:

    @app_configuration.json = OpenStruct.new(JSON.parse(@app_configuration.json))

为什么我必须手动分配值?

ff.text_field如何查找属性值?

1 个答案:

答案 0 :(得分:1)

您需要使用使用ff声明的构建器变量fields_for

<%= f.fields_for :json, @app_configuration.json do |ff| %>
    <%= ff.text_field :attr %>
<% end%>

使用f.text_field :attr会在父模型中查找不存在的attr以及您在编辑期间看不到值的原因。

对于非AR自定义对象,您还需要将第二个参数传递给fields_for,如图所示。请参阅fields_for上的文档。