2
我有以下2種型號:的Rails 3態關聯養NameError
class FuzzyDate < ActiveRecord::Base
belongs_to :fuzzy_dateable, :polymorphic => true
end
class Device < ActiveRecord::Base
has_one :received_date, :as => :fuzzy_dateable
end
與下面的模式:
create_table "devices", :force => true do |t|
t.string "meid"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "fuzzy_dates", :force => true do |t|
t.date "date"
t.integer "fuzz"
t.integer "fuzzy_dateable_id"
t.string "fuzzy_dateable_type"
t.datetime "created_at"
t.datetime "updated_at"
end
我們啓動控制檯,好嗎?
>> d = Device.create(:meid => "A")
=> #<Device id: 1, meid: "A", created_at: "2010-12-16 06:52:55", updated_at: "2010-12-16 06:52:55">
>> fd = FuzzyDate.create(:date => Date.today, :fuzz => 3)
=> #<FuzzyDate id: 1, date: "2010-12-15", fuzz: 3, fuzzy_dateable_id: nil, fuzzy_dateable_type: nil, created_at: "2010-12-16 06:53:04", updated_at: "2010-12-16 06:53:04">
>> fd.fuzzy_dateable = d
=> #<Device id: 1, meid: "A", created_at: "2010-12-16 06:52:55", updated_at: "2010-12-16 06:52:55">
>> fd
=> #<FuzzyDate id: 1, date: "2010-12-15", fuzz: 3, fuzzy_dateable_id: 1, fuzzy_dateable_type: "Device", created_at: "2010-12-16 06:53:04", updated_at: "2010-12-16 06:53:04">
好的,到目前爲止,這麼好。我們從另一個方向走:
>> d.received_date
NameError: uninitialized constant Device::ReceivedDate
from /Library/Ruby/Gems/1.8/gems/activerecord-3.0.3/lib/active_record/base.rb:1199:in `compute_type'
from /Library/Ruby/Gems/1.8/gems/activerecord-3.0.3/lib/active_record/reflection.rb:162:in `send'
from /Library/Ruby/Gems/1.8/gems/activerecord-3.0.3/lib/active_record/reflection.rb:162:in `klass'
from /Library/Ruby/Gems/1.8/gems/activerecord-3.0.3/lib/active_record/reflection.rb:198:in `quoted_table_name'
from /Library/Ruby/Gems/1.8/gems/activerecord-3.0.3/lib/active_record/associations/has_one_association.rb:97:in `construct_sql'
from /Library/Ruby/Gems/1.8/gems/activerecord-3.0.3/lib/active_record/associations/has_one_association.rb:7:in `initialize'
from /Library/Ruby/Gems/1.8/gems/activerecord-3.0.3/lib/active_record/associations.rb:1450:in `new'
from /Library/Ruby/Gems/1.8/gems/activerecord-3.0.3/lib/active_record/associations.rb:1450:in `received_date'
from (irb):5
>>
Doh!我做了一堆Googleing,我發現的答案都是錯誤地使用複數模型名稱的方式,這裏不是這種情況。我已經度過了幾個晚上我的頭反對這個,所以任何指導將不勝感激。
賓果!就是這樣。謝謝你的幫助。 – 2010-12-17 05:58:54
就是這樣。謝謝 – yek 2011-04-04 14:17:09