2014-10-30 28 views
0

我有一個軌道模型,有兩個字段屬性::commission_fixed & :commission_percentage。用戶應該只能選擇以下兩個選項之一::commission_fixed:commission_percentage不能同時在表單提交。這可能使用Rails驗證?如果是這樣的話,最好的辦法是什麼?有條件的軌道窗體驗證

+0

保持一個下拉菜單或選擇選項,是什麼阻止你。您可以使用jquery停止單選按鈕上的多項選擇。 – 2014-10-30 06:14:09

+0

@CaffeineCoder我們怎樣才能使兩個屬性的選擇框,這是可能的AFAIK我們可以發送選項作爲選擇框單一屬性 – anusha 2014-10-30 06:15:27

+0

感謝您的答覆。我知道我可以通過這種方式來實現,我的問題更多是出於好奇,如果可以純粹通過使用Rails驗證來實現。 – 2014-10-30 06:17:18

回答

0

您的問題在於您構建了列名稱/模型屬性的方式。

理想情況下,您應該將模型上的屬性名稱更改爲:commission_method:commission_rate。這允許更大的靈活性。然後在您的視圖中,您可以使用單選按鈕實現您要查找的內容。您可以將:commission_rate作爲小數點存儲在數據庫中。

<%= f.radio_button :commission_method, "Fixed" %> 
<%= f.radio_button :commission_method, "Percentage" %> 
<%= f.number_field :commission_rate %> 

在視圖文件,如果你需要顯示一個固定的量和比例,你可以切換隻是做:

<% case @sales_associate.commission_method %> 
<% when 'Fixed' %> 
    <span>Fixed: <%= number_to_currency(@sales_associate.commission_rate) %></span> 
<% when 'Percentage' %> 
    <span>Percentage: <%= "% #{@sales_associate.commission_rate}" %></span> 
<% end %> 

但是,「可能」寫的是拋出一個自定義的驗證方法如果兩個屬性都已分配,則會出錯

在任何型號:

class SalesAssociate 
    validate :only_one_selected_commission 

    def only_one_selected_commission 
    errors[:base] << "Please select only one form of commission" if self.commission_fixed.present? && self.commission_percentage.present? 
    end 
end 
+0

謝謝你這樣一個美好的,充分知情和清晰的答案。我明白你的意思與列名/模型屬性,我會重寫這個來反映你的答案。歡呼 – 2014-10-31 00:11:31

+0

很高興提供幫助。乾杯 – 2014-10-31 00:52:52