验证类似条件的列列表

时间:2018-03-19 16:48:48

标签: ruby-on-rails validation activemodel

我正在尝试验证此列的列表。所以我写了这段代码。它是有效的,但我们可以为此创建一个列数组吗? 我写的例子:

class UserAccount < ApplicationRecord

  self.table_name = 'accounts'

  belongs_to :user

  with_options unless: :new_record? do
    validates :address, presence: { message: 'This field is required' }
    validates :street, presence: { message: 'This field is required' }
    validates :house_number, presence: { message: 'This field is required' }
    validates :zip_code, presence: { message: 'This field is required' }
    validates :city, presence: { message: 'This field is required' }
    validates :country, presence: { message: 'This field is required' }
  end

end

要迭代的列数组:

REQUIRED_COLUMNS = %w[address street house_number zip_code city country]

2 个答案:

答案 0 :(得分:1)

enter image description here可以将多列作为第一个参数,因此您可以在一行中提供所有列,即

validates :address, :street, :etc, presence: { message: 'This field is required' }

如果你想为此使用数组,你应该可以使用validates运算符,即

REQUIRED_COLUMNS = %i(address street house_number zip_code city country).freeze
validates *REQUIRED_COLUMNS, presence: { message: 'This field is required' }

请注意,我已切换到%i()以生成符号数组。

使用splat运算符,简单地说,对数组进行解构,使其内容作为单独的args传递,而不是仅传递给一个数组参数。

希望有所帮助 - 让我知道你是如何上场的。

答案 1 :(得分:0)

你可以这样做:

validates_presence_of :address, :street, :house_number, :zip_code, :city, :country, unless: :new_record?

请注意,我删除了您的message声明。这样,验证将使用默认消息,其中包括验证失败的字段的名称 - 即"City can't be blank." - 而不是仅仅说"This field is required."而没有向用户解释什么是"This"是的。