У меня есть три ресурса (небольшое предостережение в том, что Пользователь связан с гемом Devise, подробности которого я оставил, так как не думаю, что они актуальны.
users <-> членство <->groups
требуют 'digest / 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