我正在使用Rails'form_for
和fields_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
如何查找属性值?
答案 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
上的文档。