我有三個資源(稍微需要注意的是,用戶與Devise gem相關聯,因爲我認爲它們並不相關,所以我忽略了其中的詳細信息)Rails relationship.build不適用於多對多
用戶< - >成員身份< - >組
需要 '消化/ SHA2'
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me, :memberships_attributes
has_many :memberships
has_many :groups, :through => :memberships
attr_accessible :memberships
accepts_nested_attributes_for :memberships
end
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :group
attr_accessible :user, :group
end
class Group < ActiveRecord::Base
has_many :memberships
has_many :users, :through=>:memberships
end
的問題是,構建沒有使用我提供的屬性,專門爲GROUP_ID。我粘貼調試的輸出:
(rdb:1903) @user.memberships.build(:group_id=>1)
#<Membership id: nil, user_id: 5, group_id: nil, created_at: nil, updated_at: nil>
我知道的關係/ ORM映射是很好的,因爲我可以這樣做:
(rdb:1903) @user.memberships.first.group_id=1
1
(rdb:1903) @user.memberships.first
#<Membership id: nil, user_id: 5, **group_id: 1**, created_at: nil, updated_at: nil>
我已經試過這一個簡單的has_many演示應用程序,它工作正常。
答:它是通過更新成員模型求解,有:
attr_accessible :user, :group, :group_id
此組是否存在(被保存)?在MTM關係中,必須先保存關聯的對象。 – kek 2011-04-06 13:33:23
是的,它確實存在(rdb:1903)@ user.memberships.first.group #<組ID:1,標題:「默認」,created_at:「2011-03-22 12:27:52」,updated_at: 「2011-03-22 12:27:52」> – 2011-04-06 13:50:35
你可以發佈你的完整模型的代碼爲每個模型,可能有別的干擾。 – 2011-04-06 16:37:32