自定义字段实现

时间:2013-07-30 22:21:50

标签: ruby-on-rails ruby

我正在尝试将“自定义字段”添加到销售应用程序(Ruby 2,Rails 4,Postgres)。

以下是相关架构:

relevant database schema

实施此方法的最佳方法是什么? values是多态的,fieldsaccounts是一对多的。

有没有办法循环遍历字段并获取相关值?

2 个答案:

答案 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存储在单独的表中以及那种事物隔离