我有一個我的數據庫表模型。我想覆蓋該特定表的列名稱。我將如何實現它。如何覆蓋Rails模型中的列?
例如,讓我的表稱爲模擬,它有一個名爲col_a
col_a
20
34
42
23
12
我會做一個@dummy.col_a
一列。現在這個方法應該返回給我的結尾爲0的數字和其他所有的數字,它應該返回原始值。我可以通過定義一個新方法來實現,但我想重寫列名稱本身。請幫忙。
我有一個我的數據庫表模型。我想覆蓋該特定表的列名稱。我將如何實現它。如何覆蓋Rails模型中的列?
例如,讓我的表稱爲模擬,它有一個名爲col_a
col_a
20
34
42
23
12
我會做一個@dummy.col_a
一列。現在這個方法應該返回給我的結尾爲0的數字和其他所有的數字,它應該返回原始值。我可以通過定義一個新方法來實現,但我想重寫列名稱本身。請幫忙。
您可以覆蓋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
您可以簡單地定義一個與該列同名的方法。要獲取實際列值,請使用self [column_name]。所以,這樣的事情應該工作:
class Dummy < ActiveModel::Base
def col_a
self[:col_a] % 10 == 0 ? 0 : self[:col_a]
end
end
(假設爲col_a是一個整數)。
可以實現通過overwriting default accessors如文檔中描述的。所有列值都可以通過Active Record對象上的基本訪問器自動獲得,但有時需要專門化這種行爲。這可以通過覆蓋默認訪問器(使用與屬性相同的名稱)並調用read_attribute(attr_name)
和write_attribute(attr_name, value)
實際改變內容來完成。
滾動到覆蓋默認訪問器部分以獲取更多信息。
我有點遲到了這裏,但一個非常優雅的方式來做到這一點是簡單地使用super
,應該是'自我[:爲col_a]!%10 = 0? self [:col_a]:0'或'(self [:col_a]%10).zero? ? 0:self [:col_a]' – fl00r 2011-05-06 10:17:02
是的 - 我假設0在這裏評估爲false,但它不。固定。 – Thilo 2011-05-06 10:20:37