我已經採納了,我不確定爲什麼有些東西不起作用。元素的多態關聯,還有其他什麼需要添加?
我有一個pricable多態關聯,我只用於一個稱爲Item的單一模型。它看起來像這樣:
class Item < ActiveRecord::Base
#price
has_one :price, :as => :pricable
accepts_nested_attributes_for :price
attr_accessible :price_attributes, :price, ....
我想添加到一個事件模型,並添加以下內容:
class Event < ActiveRecord::Base
#price
has_one :price, :as => :pricable
accepts_nested_attributes_for :price
attr_accessible :price, :price_attributes
但是,我不能設置:
ruby-1.9.2-p290 :001 > e=Event.find(19) #ok
ruby-1.9.2-p290 :002 > e.price
Creating scope :page. Overwriting existing method Price.page.
Price Load (0.8ms) SELECT `prices`.* FROM `prices` WHERE `prices`.`pricable_id` = 19 AND `prices`.`pricable_type` = 'Event' LIMIT 1
=> nil
ruby-1.9.2-p290 :003 > e.price.price=23
NoMethodError: undefined method `price=' for nil:NilClass
from /Users/jt/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.1.0/lib/active_support/whiny_nil.rb:48:in `method_missing'
from (irb):3
嗯....它看起來像關係設置正確,該事件可以通過attr_accessible訪問價格。任何想法還有什麼可以進行?
THX
,是build_price爲create_price的別名?賞金後我能夠工作5分鐘。大聲笑... – timpone 2012-07-17 03:08:46
build_price不是create_price的別名。它們之間的區別在於,build_price只構建關聯的價格對象,並且不將其保存到數據庫,而create_price構建價格對象並立即保存。有關build_association和create_association方法的詳細信息,請查看[has_one](http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_one)文檔。 – mdominiak 2012-07-17 06:58:56