Kie*_*n E 1 ruby ruby-on-rails ruby-on-rails-4
请注意,这是一个示例,而不是我的实际用例。基本概念是我所追求的
(Ruby 版本 - 2.2.1,Rails 版本 - 4.2.4)
假设我的数据库中有email和first_name字段,我想使用 before_save 回调来小写。通常,我会这样做
before_save :downcase_function
...
private
def downcase_function
self.email = email.downcase
self.first_name = first_name.downcase
end
Run Code Online (Sandbox Code Playgroud)
但是,这不是很灵活或可重用。如果我想将此函数添加到 last_name 字段怎么办?如果我需要跨多个模型怎么办?
我想做的是这样的事情
#pseudocode - does not work
before_save :downcase_function(:email, :first_name, :last_name)
...
private
def downcase_function(fields)
fields.each do |f|
self.f = f.downcase
end
end
Run Code Online (Sandbox Code Playgroud)
我知道这可能看起来很傻,但我没有运气。
以下是我所追求的关键事项:
非常感谢!
也许是这样的:
ATTRS_TO_DOWNCASE = %i( email first_name last_name )
before_save :downcase_attrs
private
def downcase_attrs
ATTRS_TO_DOWNCASE.each do |attr|
write_attribute(attr, read_attribute(attr).downcase)
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |