2010-09-26 57 views
2

我花了半個工作日試圖在AR中追蹤這一點。給定一個模式設置,如:爲什麼ActiveRecord無法將對象分配給關聯屬性?

class Publication < ActiveRecord::Base 
    has_many :subscriptions 
end 

class Subscription < ActiveRecord::Base 
    belongs_to :publication 
    belongs_to :user 
end 

在控制器,

@new_subscription = publication.subscriptions.create(user: @current_user) { |r| ... } 

完全在開發模式第一次在服務器啓動後調用。第二次但是,它會引發從

~/.rvm/gems/ruby-1.9.1-p378/gems/activerecord-2.3.8/lib/active_record/base.rb:2906:in `block in assign_attributes': 
ActiveRecord::UnknownAttributeError: unknown attribute: user 

設置

config.cache_classes = true 
config/environments/development.cfg

使問題消失的錯誤。

AR在哪裏處理爲belongs_to關聯創建attr_accessor /作家,爲什麼這個工作是第一次,而不是第二次被調用?似乎訪問器在類之間的卸載和重載請求之間沒有被定義?更多信息:PublicationSubscription正在使用STI,並且如果這些關聯不應該有任何區別,那麼這些關聯就會在基類上定義。這是紅寶石1.9.1和Rails/AR 2.3.8

感謝任何線索。

+0

這是錯字錯誤嗎? 'has_many'和'belongs_to'不是符號...應該是'has_many:subscriptions' ... – PeterWong 2010-09-26 02:44:07

+0

是的抱歉,錯字糾正。問題不是由於打字錯誤 - 在第一個請求之後的行爲是不同的。就好像關聯訪問器用戶=正在被定義或者未被第二次重新定義。我害怕做一個解決方法(例如分配ID),因爲語法滲透到應用程序中。它應該工作。 – tribalvibes 2010-09-26 03:03:00

回答

1

嘗試使用nested_attributes

+1

nope。不試圖設置用戶的屬性,只是嘗試關聯現有的用戶對象。即創建(user_id:@ current_user.id),但使用對象語法,與分配has_one/blongs_to關聯相同。你是說無論嵌套屬性,語法都是無效的嗎? – tribalvibes 2010-09-29 21:29:10

相關問題