代码之家  ›  专栏  ›  技术社区  ›  Done job

如何在保存到rails框架之前通过循环剥离活动记录中的列值?

  •  2
  • Done job  · 技术社区  · 6 年前

    在保存到数据库之前,我必须删除每条记录的空格。

    我需要帮助将代码转换成循环,但作为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
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   spickermann    6 年前

    我想是的 attributes.each 迭代当前实例的所有属性名和值(同时忽略属性名)。对于我要调用的每个值 try(:strip!) try strip! 实际上 respond_to 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
    
        2
  •  0
  •   Ashik Salman    6 年前

    list = Model.columns.select { |x| x.name if x.type == :string }.map(&:name)
    

    现在,可以使用循环将strip应用于每一列

    list.each { |x| self.send(x.to_sym)&.strip! }
    

    希望有帮助