Rails :before_save 大写私有方法

Posted

技术标签:

【中文标题】Rails :before_save 大写私有方法【英文标题】:Rails :before_save upcase private method 【发布时间】:2015-11-12 13:46:09 【问题描述】:

我的模型中有两种方法可以在将注册字段插入数据库之前对其进行更改。 strip_whitespace 方法有效。但是,make_uppercase 没有。

我也尝试将make_uppercase 方法传递给before_save 回调just。任何帮助将不胜感激。

class Vehicle < ActiveRecord::Base
  belongs_to :vehicle_class
  belongs_to :vehicle_make

  before_save :strip_whitespace, :make_uppercase

  # Strip whitespace from registration field before inserting it in to the DB
  def strip_whitespace
    self.registration.gsub!(/\s+/, '')
  end

  # Make all characters uppercase before inserting it in to the DB
  def make_uppercase
    self.registration.upcase
  end

  private :strip_whitespace, :make_uppercase

end

【问题讨论】:

【参考方案1】:

试试:

def make_uppercase
  self.registration.upcase!
end

bang 方法(大写!)修改接收器 - 在本例中为 self.registration。

【讨论】:

【参考方案2】:

我认为你应该使用upcase! 而不仅仅是upcase

或者像这样重新定义方法:

def make_uppercase
  self.registration = self.registration.upcase
end

【讨论】:

谢谢 Zozo,@AndreOgle 刚刚打败了你。非常感谢您抽出宝贵的时间。

以上是关于Rails :before_save 大写私有方法的主要内容,如果未能解决你的问题,请参考以下文章

Rails:before_save 变量内容

Rails - 在 before_save 中获取旧值

Rails:before_save - 堆栈级别太深

带有 MD5 摘要的 Rails 模型 before_save

我如何在 Rails 3 的控制器中获取 before_save 值?

Rails Rspec / Factory Bot没有调用模型before_save回调