我有一个有两个字段属性的rails模型::commission_fixed
& :commission_percentage
。用户应该只能在以下两个选项中选择一个::commission_fixed
或:commission_percentage
,而不是在表单提交中。这是否可以使用Rails验证?如果是这样,实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
您的问题在于您构建列名称/模型属性的方式。
理想情况下,您应该将模型上的属性名称更改为: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 %>
然而,你&#34;可能&#34;编写一个自定义验证方法,如果两个属性都已分配,则抛出错误。
在任何模型中:
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