【问题标题】:Validate non-model field验证非模型字段
【发布时间】:2010-01-14 07:17:42
【问题描述】:

我在我的表单中添加了一个额外的字段:

<%= select_tag :quantity, options_for_select(["Select a Value"].concat((1..10).to_a)) %>

它指定要创建的记录的副本数。

我如何验证该字段的存在(或数量),因为它不是模型本身的一部分?

validates_presence_of :quantity 失败!!!

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    找到了。您可能想在模型中添加一个虚拟属性。

    .........
    
    attr_accessor :not_on_db
    .........
    
    validates_presence_of     :not_on_db,
    validates_length_of       :not_on_db,    :within => 1..5
    .........
    

    【讨论】:

      【解决方案2】:

      使用 validates_numericality_of 验证。默认情况下,数字验证检查浮点类型,您需要告诉您要查看整数。由于数量不会存储在db中,所以它需要是虚拟的。

      试试这个:

      attr_accessor :quantity
      validates_numericality_of :quantity, :only_integer => true
      

      validates_numericality_of 默认不接受 nil,你应该不需要检查属性的存在,因为你可能想改变视图中数量的范围,我不会在这里验证它。

      如果您想验证范围,请将其声明为模型中的常量。在验证和视图中都引用这个常量。

      【讨论】:

      • 我收到了这个实现的以下异常:未定义的方法 `quantity_before_type_cast' 有什么想法吗?
      • 您可以编写方法`quantity_before_type_cast'并返回self.quantity。它不是很干净,而是一种解决方案。
      猜你喜欢
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多