条件Rails表单验证

时间:2014-10-30 05:57:28

标签: ruby-on-rails validation

我有一个有两个字段属性的rails模型::commission_fixed& :commission_percentage。用户应该只能在以下两个选项中选择一个::commission_fixed:commission_percentage,而不是在表单提交中。这是否可以使用Rails验证?如果是这样,实现这一目标的最佳方法是什么?

1 个答案:

答案 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