我正在尝试向销售应用程序(Ruby 2,Rails 4,Postgres)添加“自定义字段”。自定义字段实现
下面是相关的模式:
什么是去实现这个的最佳方式? values
是多态的,fields
与accounts
是一对多的。
有没有办法在字段上循环并获取关联的值?
我正在尝试向销售应用程序(Ruby 2,Rails 4,Postgres)添加“自定义字段”。自定义字段实现
下面是相关的模式:
什么是去实现这个的最佳方式? values
是多态的,fields
与accounts
是一对多的。
有没有办法在字段上循环并获取关联的值?
我可能会误解你的问题,但我认为Rails正在调用你的whatever-custom-field-label-is
方法,因为它试图获取输入的初始值/默认值。
使用像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的嵌套属性,尽管这可能会给你更多的控制权。
还有其他的方法来复杂的轨道形式。一种方法是建立谁是编组持久性对象之间的数据负责,并有形成表现形式对象,无需知道该属性X被存储在一个单独的表和诸如此类的事情
我认为你是隔离的形式可能是对的。有关如何解决这个问题的建议,因为自定义字段不是直接属于'@ sale'(甚至是Sale模型)的一部分? – Dre
@Dre你也许可以在默认值传递给'text_field'方法,避免了电话,但你可能会被重新架构你的看法使用演示/表单装饰(看看[改革]得到更好的服务(https://github.com/apotonick/reform))。 – coreyward