我正在尝试验证此列的列表。所以我写了这段代码。它是有效的,但我们可以为此创建一个列数组吗? 我写的例子:
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]
答案 0 :(得分:1)
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"
是的。