我有一個是做一個手動選擇多個表一個非常複雜的Rails(V 3.2)模型。這對於獲取顯示我的模型所需的所有數據非常有用。但是,當我的數據不存在並且我必須創建一個虛擬對象時,這些列在我的模型中不存在。對於我來說,我無法想出一種方法來支持模型上的虛擬列和實際列。Rails的模型屬性
這是一個很多比這更復雜,但是這是一般選擇我目前有:
class MyObject < ActiveRecord::Base
attr_accessible :apples, :bananas, :oranges
def self.get(id)
select("my_objects.*, table1.apples, table2.bananas, table3.oranges")
.joins("left outer join table1 on something
left outer join table2 on something
left outer join table2 on something")
.where(:my_object => id)
end
end
這什麼我需要它時顯示id
存在的偉大工程。但是,在某些情況下,id
不存在,我必須顯示一個虛擬(或默認)對象。
我想我可以簡單地做這樣的事情對於虛擬對象:
@my_object = MyObject.new({:apples => 1,
:bananas => 50,
:oranges => 10})
但當然,在視圖中,當我做@my_object.apples
我得到一個錯誤,因爲myObject的實際上不具有這些列:
ActionView::Template::Error (unknown attribute: apples)
下一步我真是加attr_accessor
到MyObject
型號:
attr_accessor :apples, :bananas, :oranges
,對於virtual
版本的MyObject
完美的作品。但是現在,當試圖展示真實版本的對象時,我所有的蘋果,香蕉和橘子都是零!我認爲這是因爲attr_accessor
獲取者和設置者重寫了選擇返回的內容。
我怎麼能支持這種模式的虛擬和實際屬性?
p.s.我已經嘗試了多種使用method_missing
以及define_method
的方法,但一直未能取得任何成功。
這可能是因爲這是你構建一個例子,但我很困惑,爲什麼你提到的兩個'apple'和'apples' ,「香蕉」和「香蕉」,「杯子」和「桔子」......你希望能夠在MyObject實例上調用的實際方法是什麼? – carols10cents
@ carolclarinet - 對不起,這是由於我錯過了所有更改的編輯。現在已經修復了。核心問題是,有時屬性存在,有時他們不會 – lightswitch05
真棒,這清除了很多。謝謝! – carols10cents