在Rails before_save方法中大写多个属性

卡尔·爱德华兹

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

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

然后,您可以只将要大写的属性添加到capitalizable数组中。upcase对某些模型中的所有String使用类似的代码,只是为了保持数据清洁的一致性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails:before_save大写私有方法

来自分类Dev

Rails:`before_save`会干扰`save?`

来自分类Dev

了解Ruby / Rails中的before_save

来自分类Dev

Ruby on Rails:before_save字段小写

来自分类Dev

Smart way to handle before_save rails

来自分类Dev

Rails before_save无法正常工作

来自分类Dev

在Rails 4上注册多个before_save条件回调

来自分类Dev

Rails:为什么调用parent上的before_save?

来自分类Dev

Rails-在before_save中获取旧值

来自分类Dev

在rails 6上未触发before_save回调

来自分类Dev

Rails:为什么调用parent上的before_save?

来自分类Dev

Ruby on Rails:before_save字段转换为小写

来自分类Dev

Rails 4:如何取消“ before_save”回调中的保存?

来自分类Dev

为什么this before_save无法更新Rails中的验证日期?

来自分类Dev

Rails 5 - 当关系是可选的时,对belongs_to 存在的条件before_save 回调

来自分类Dev

Rails 5.0.1-Friendly_id gem-包含活动关注模块before_create或before_save

来自分类Dev

在Ruby On Rails中大写小写字母

来自分类Dev

在Rails的视图中大写一个单词

来自分类Dev

处理before_save导轨的智能方法

来自分类Dev

编写before_save函数以检查所有目标属性的更好方法不是空白吗?

来自分类Dev

多个类的Rails通用方法

来自分类Dev

在相关模型中的属性更改后运行before_save

来自分类Dev

.save上的Rails NoMethodError

来自分类Dev

Rails-单个属性的多个条目

来自分类Dev

Rails:通过多个属性查找模型

来自分类Dev

Rails Mongoid-搜索多个属性

来自分类Dev

Rails if语句具有多个布尔属性

来自分类Dev

Rails表单标签大写问题

来自分类Dev

Rails多个嵌套表单