【发布时间】: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