我正在尝试将“自定义字段”添加到销售应用程序(Ruby 2,Rails 4,Postgres)。
以下是相关架构:
实施此方法的最佳方法是什么? values
是多态的,fields
与accounts
是一对多的。
有没有办法循环遍历字段并获取相关值?
答案 0 :(得分:3)
我可能会误解你的问题,但我认为Rails正在调用你的whatever-custom-field-label-is
方法,因为它试图获得输入的初始值/默认值。
答案 1 :(得分:1)
使用text_field
之类的帮助程序需要为名为的属性设置getter方法。 Rails将使用它来预填充该字段。
跨多个模型的表单的内置方法是嵌套属性。
如果您将accepts_nested_attributes_for :values
添加到销售模型中,那么
= @sale.fields_for :values do |value_form|
= value_form.label :data, value_form.object.field.label
= value_form.text_field :data
应为每个值渲染标签和文本字段(对于每个值,块将被生成一次)。
或者你可以完全避开铁轨助手。
如果您在表格中填写
= text_field_tag "sale[values_hash][#{v.field.label}]", v.data
然后它应该渲染而不改变模型。当表单提交params[:sale][:values_hash]
时,将是输入值的字段标签的哈希值。您需要在模型上使用values_hash=
方法,否则保存会爆炸。如果你沿着这条路线继续走得足够远,你最终会得到rails的嵌套属性,尽管这可能会给你更多的控制权。
还有其他方法可以在rails中使用复杂的表单。一种是创建表单对象,它们单独负责在持久性对象之间编组数据并形成表示,将表单与必须知道属性X存储在单独的表中以及那种事物隔离