2010-11-03 32 views
0

將應用程序轉換爲Rails 3.進入這個缺少的語法糖。Rails 3,has_many:through和<<運算符

class Group < ActiveRecord::Base 
    has_many :memberships 
    has_many :users, :through => :memberships 
end 

class Membership < ActiveRecord::Base 
    belongs_to :group 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :memberships 
    has_many :groups, :through => :memberships 
end 

我不能再這樣做對Rails 3:

$ group = Group.first 
$ user = User.first 
$ group.users << user 
ActiveRecord::StatementInvalid: Mysql2::Error: Column 'user_id' cannot 
be null: INSERT INTO `memberships` (`admin`, `created_at`, 
`group_id`, `leader`, `updated_at`, `user_id`) VALUES 
(0, '2010-11-03 18:31:33', 5, 0, '2010-11-03 18:31:33', NULL) 

哪兒去<<?它被替換了什麼?

回答

0

< <方法在那裏。錯誤來自MySQL。你是否真的用現有的記錄來做這件事?

0

重要遺漏信息。我有一個初始化的是做了以下逼我的模型中保護狀態:

ActiveRecord::Base.send(:attr_accessible, nil) 

在這種情況下,會員類實際需要的是這樣的:

class Membership < ActiveRecord::Base 
    belongs_to :group 
    belongs_to :user 
    attr_accessible :user_id, :group_id 
end 

基本上,Rails內部切不可有權訪問Rails 3之前曾擁有的受保護屬性。