2012-04-04 30 views
0

我有三種模型。 1-產品 2-自行車 3-汽車爲什麼模型object.save觸發missing_method(rails 2.2)

這些模型具有多態關聯。產品型號包括自行車和汽車的共同的東西:如價格,顏色等

現在我想直接通過汽車或自行車的像bike_obj.price對象訪問產品的方法

def method_missing(meth, *args, &blk) 
    product.send(meth, *args, &blk) 
rescue NoMethodError 
    super 
end 

現在我能夠實現這個

>> Car.last.price 
=> 1000 

但問題是汽車模型已停止工作的保存方法。當我做Car.last.save時,我不知道爲什麼它會在method_missing中進行。它提出了這個例外

NoMethodError: undefined method `<=>' for #<Car:0x7fcdd39ef2c0> 
+0

你知道Rails的#delegate方法? IT可能對您有用:http://api.rubyonrails.org/classes/Module.html#method-i-delegate – joelparkerhenderson 2012-04-04 08:31:16

+0

是的一種方法是將方法委託給產品模型。但這樣我不得不委託一大堆方法。然後我想通過method_missing來實現它。不幸的是,這不適合我 – 2012-04-04 09:05:02

回答

1

您應該重寫respond_to?每當你覆蓋method_missing

def respond_to?(method, include_private = false) 
    super || product.respond_to?(method, include_private) 
    end