2013-07-30 108 views
1

我正在嘗試向銷售應用程序(Ruby 2,Rails 4,Postgres)添加「自定義字段」。自定義字段實現

下面是相關的模式:

relevant database schema

什麼是去實現這個的最佳方式? values是多態的,fieldsaccounts是一對多的。

有沒有辦法在字段上循環並獲取關聯的值?

回答

3

我可能會誤解你的問題,但我認爲Rails正在調用你的whatever-custom-field-label-is方法,因爲它試圖獲取輸入的初始值/默認值。

+0

我認爲你是隔離的形式可能是對的。有關如何解決這個問題的建議,因爲自定義字段不是直接屬於'@ sale'(甚至是Sale模型)的一部分? – Dre

+0

@Dre你也許可以在默認值傳遞給'text_field'方法,避免了電話,但你可能會被重新架構你的看法使用演示/表單裝飾(看看[改革]得到更好的服務(https://github.com/apotonick/reform))。 – coreyward

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的嵌套屬性,儘管這可能會給你更多的控制權。

還有其他的方法來複雜的軌道形式。一種方法是建立誰是編組持久性對象之間的數據負責,並有形成表現形式對象,無需知道該屬性X被存儲在一個單獨的表和諸如此類的事情

+0

第二種方法適用於我,謝謝。但是我可能對我最初的問題說得不好。循環遍歷字段並填充相關數據的最佳方法是什麼?現在我遇到了問題,例如,一個新對象沒有與它關聯的「值」,並且什麼都沒有顯示。 – Dre

+0

無論採用哪種方法,您都需要創建一些空的值,如果您想讓它們的輸入呈現 –

+0

這是否被認爲是一種不好的做法?有沒有辦法做到這一點'null'值根本不被插入?這會導致重大的性能問題嗎? – Dre