bra*_*boy 14 ruby activerecord overriding model ruby-on-rails
我有一个数据库表的模型.我想覆盖该特定表的列名.我将如何实现它.
例如,让我的表被称为DUMMY,它有一个名为的列 col_a
col_a
20
34
42
23
12
Run Code Online (Sandbox Code Playgroud)
我会做的@dummy.col_a.现在这个方法应该返回0表示以0结尾的数字,对于其他一切,它应该返回原始值.我可以通过定义一个新方法来做到这一点,但我想覆盖列名本身.请帮忙.
hta*_*ata 32
您可以覆盖该col_a方法.使用该read_attribute方法读取数据库中的值.像这样的东西:
def col_a
if self.read_attribute(:col_a).to_s.end_with?('0')
0
else
self.read_attribute(:col_a)
end
end
Run Code Online (Sandbox Code Playgroud)
您只需定义与列名称相同的方法即可.要获取实际列值,请使用self [column_name].所以像这样的东西应该工作:
class Dummy < ActiveModel::Base
def col_a
self[:col_a] % 10 == 0 ? 0 : self[:col_a]
end
end
Run Code Online (Sandbox Code Playgroud)
(这假设col_a是一个整数.)
我在这里参加聚会有点晚了,但是一个非常优雅的方法就是简单地使用super
class Dummy < ApplicationRecord
def col_a
super % 10 === 0 ? 0 : super
end
end
Run Code Online (Sandbox Code Playgroud)