【问题标题】:Validating attr_accessor, Rails 4验证 attr_accessor,Rails 4
【发布时间】:2016-04-09 22:43:54
【问题描述】:

无论出于何种原因,我都无法正确验证我的 attr_accessor 属性。

  attr_accessor :line1, :city, :postal_code, :state, :personal_id_number, :ssn_last_4, :bank_account_number, :bank_routing_number

  validates :line1, presence: true, if: :line1
  validates :city, presence: true, if: :city
  validates :postal_code, presence: true, length: { maximum: 10 }, if: :postal_code
  validates :state, presence: true, length: { maximum: 2 }, if: :state
  validates :personal_id_number, presence: true, numericality: { only_integer: true }, if: :personal_id_number
  validates :ssn_last_4, presence: true, length: { is: 4 }, numericality: { only_integer: true }, if: :ssn_last_4
  validates :bank_account_number, numericality: { only_integer: true }, if: :bank_account_number
  validates :bank_routing_number, numericality: { only_integer: true }, if: :bank_routing_number

使用此代码,所有属性都通过验证,无论它们是否应该。例如,postal_code 即使超过 10 个字符也会通过,而其他字符即使是空白也会通过。

如果我删除 if 语句,它们都不会通过。我得到了每一个错误。比如正确填写表格会显示city不能为空等...

if 语句必须存在,因为这些属性在创建时将是空白的,并且只会出现在 edit 表单上。

如何获得验证以使用attr_accessor

【问题讨论】:

  • 请发布您遇到的错误
  • 您是否使用 attr_accessor 方法,因为这些字段没有保存到 db 表中?
  • 是的,所有属性都不会保存到我的数据库中。它们被传递给 API。
  • 我不确定您的确切用例,但您可以在非持久模型上使用valid?,它会运行验证而不保存它。如果您确定要覆盖模型 getter 方法,您可能需要查看此帖子 stackoverflow.com/questions/21835116/…

标签: ruby-on-rails ruby validation ruby-on-rails-4


【解决方案1】:

如果该类根本没有被数据库表备份,您可以使用ActiveModel 来获得 ActiveRecord 功能。您需要做的就是将模型包含在您的课程中。然后验证将按照您对 ActiveRecord 的预期运行,您不需要条件。

class Foo
  include ActiveModel::Model
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    相关资源
    最近更新 更多