我正在嘗試向銷售應用程序(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