在 rails 框架中保存之前,如何通过循环去除活动记录中的列值?
How to strip column values in Active record through loop before saving in rails framework?
在保存到数据库之前,我必须删除每条记录的空格。
我可以通过为每一列指定它来做到这一点,但是当每条记录中有 100 列时,这很痛苦,而且代码行数不会大大增加。
需要帮助将代码更改为循环,但作为业余爱好者 rails 我无法完成它。
class hello < ActiveRecord::Base
before_validation :remove_spaces
def remove_spaces
self.login = self.login.strip if self.login.present?
self.email = self.email.strip if self.email.present?
. so on .......
end
end
您可以获取字符串类型的所有列名:
list = Model.columns.select { |x| x.name if x.type == :string }.map(&:name)
现在您可以通过循环在每一列上应用条带
list.each { |x| self.send(x.to_sym)&.strip! }
希望对您有所帮助
我会 attributes.each
迭代所有属性名称和当前实例的值(同时忽略属性名称)。对于每个值,我会调用 try(:strip!)
从值中去除空格。请注意 try
仅在实际 respond_to
strip
的值上调用 strip!
(这意味着基本上只是字符串),因此它会忽略 nil
值或值不受支持的类型 - 如时间戳或布尔值。
before_validation :sanitize_strings
private
def sanitize_strings
attributes.each { |_, value| value.try(:strip!) }
end
或者当您只想清理特定属性时,您可以迭代它们的名称:
ATTRIBUTES_TO_SANITIZE = %i[name title description]
def sanitize_strings
ATTRIBUTES_TO_SANITIZE.each { |attr| send(attr).try(:strip!) }
end
在保存到数据库之前,我必须删除每条记录的空格。 我可以通过为每一列指定它来做到这一点,但是当每条记录中有 100 列时,这很痛苦,而且代码行数不会大大增加。
需要帮助将代码更改为循环,但作为业余爱好者 rails 我无法完成它。
class hello < ActiveRecord::Base
before_validation :remove_spaces
def remove_spaces
self.login = self.login.strip if self.login.present?
self.email = self.email.strip if self.email.present?
. so on .......
end
end
您可以获取字符串类型的所有列名:
list = Model.columns.select { |x| x.name if x.type == :string }.map(&:name)
现在您可以通过循环在每一列上应用条带
list.each { |x| self.send(x.to_sym)&.strip! }
希望对您有所帮助
我会 attributes.each
迭代所有属性名称和当前实例的值(同时忽略属性名称)。对于每个值,我会调用 try(:strip!)
从值中去除空格。请注意 try
仅在实际 respond_to
strip
的值上调用 strip!
(这意味着基本上只是字符串),因此它会忽略 nil
值或值不受支持的类型 - 如时间戳或布尔值。
before_validation :sanitize_strings
private
def sanitize_strings
attributes.each { |_, value| value.try(:strip!) }
end
或者当您只想清理特定属性时,您可以迭代它们的名称:
ATTRIBUTES_TO_SANITIZE = %i[name title description]
def sanitize_strings
ATTRIBUTES_TO_SANITIZE.each { |attr| send(attr).try(:strip!) }
end