我花了半個工作日試圖在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
/作家,爲什麼這個工作是第一次,而不是第二次被調用?似乎訪問器在類之間的卸載和重載請求之間沒有被定義?更多信息:Publication
和Subscription
正在使用STI,並且如果這些關聯不應該有任何區別,那麼這些關聯就會在基類上定義。這是紅寶石1.9.1和Rails/AR 2.3.8
感謝任何線索。
這是錯字錯誤嗎? 'has_many'和'belongs_to'不是符號...應該是'has_many:subscriptions' ... – PeterWong 2010-09-26 02:44:07
是的抱歉,錯字糾正。問題不是由於打字錯誤 - 在第一個請求之後的行爲是不同的。就好像關聯訪問器用戶=正在被定義或者未被第二次重新定義。我害怕做一個解決方法(例如分配ID),因爲語法滲透到應用程序中。它應該工作。 – tribalvibes 2010-09-26 03:03:00