仅在填充特定属性时调用before_update触发器的方法是什么?
以下是我的代码的一部分:
before_update { self.gravatar = gravatar.downcase }
validates :gravatar, :on => :update, length: { maximum: 128 },
format: { with: VALID_GRAVATAR_REGEX },
allow_blank: true
事实上,我只想在编辑表单中填写此属性时才调用属性上的downcase函数。
我目前遇到以下错误:
nil的未定义方法`downcase':NilClass
这是合乎逻辑的。
答案 0 :(得分:4)
那样的?
before_update { self.gravatar = gravatar.downcase if gravatar.present? }
答案 1 :(得分:2)
before_update { self.gravatar = gravatar.downcase}, if: ->(s) { s.gravatar.present? }
答案 2 :(得分:2)
Rails回调接受:if
and :unless
options。
class Model
before_update :normalize_gravatar, if: :gravatar?
protected
def normalize_gravatar
self.gravatar = gravatar.downcase
end
end
上面的代码是
的快捷方式class Model
before_update :normalize_gravatar, if: ->() { gravatar.present? }
protected
def normalize_gravatar
self.gravatar = gravatar.downcase
end
end
在您的情况下,总是运行回调可能更容易,并确保在属性为空时不会崩溃。
class Model
before_update :normalize_gravatar
protected
def normalize_gravatar
self.gravatar = gravatar.downcase if gravatar.present?
end
end