ruby-on-rails - 在 Rails before_save 方法中将多个属性大写

标签 ruby-on-rails ruby callback rails-activerecord models

我想使用 before_save 方法将模型实例的 first_namelast_name 大写。我当然可以这样做:

before_save do 
  self.first_name = first_name.capitalize
  self.last_name = last_name.capitalize
end

但我更愿意一次性改变这两个属性。有没有办法在我的模型中选择某些列并对它们应用所需的方法?

最佳答案

你可以做这样的事情

before_save :capitalize_attributes

private
   def capitalize_attributes
     capitalizable = ["first_name","last_name"]
     self.attributes.each do |attr,val|
       #based on comment either of these will work
       #if you want to store nil in the DB then
       self.send("#{attr}=",val.strip.capitalize) if capitalizable.include?(attr) && !val.nil?
       #if you want to store a blank string in the DB then 
        self.send("#{attr}=",val.to_s.strip.capitalize) if capitalizable.include?(attr)
     end
   end

然后您只需将想要大写的属性添加到 capitalized 数组即可。我使用类似的代码来大写某些模型中的所有字符串,只是为了保持数据干净一致。

关于ruby-on-rails - 在 Rails before_save 方法中将多个属性大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26244488/

相关文章:

ruby-on-rails - Rails - 如何在文本字段中执行 If 和 else 语句

ruby-on-rails - Rails 模型可以有一组关联吗?

ruby-on-rails - 设计登录根路由 rails 3

javascript - tinymce 图像插入,第二次工作但不是第一次

java - 使用 JNA,如何创建 'C++ class' 并将其传递给 C++ 函数?

ruby-on-rails - 将 ruby​​gems 版本放入 Gemfile

php - 从相对路径解析绝​​对路径

ruby-on-rails - ActiveRecord 中的表名损坏错误

mysql - 存储/查询二进制序列和使用掩码搜索

javascript - 使用 NodeJS FS mkdir 时,包含回调的重要性是什么?