У меня есть следующие модели, связанные с has_many через условия.
(Обратите внимание, что Membership
подтверждает наличие атрибута kind
)
class User < ActiveRecord::Base
has_many :memberships
has_many :founded_groups,
:through => :memberships,
:source => :group,
:class_name => 'Group'
:conditions => {'memberships.kind' => 'founder'}
has_many :joined_groups, ... # same as above, but the kind is 'member'
end
class Group < ActiveRecord::Base
has_many :memberships
has_many :founders, ... # these two mirror the User's
has_many :regular_members, ... #
end
class Membership < ActiveRecord::Base
validates_presence_of :user_id
validates_presence_of :club_id
validates_presence_of :kind # <-- attention here!
belongs_to :user
belongs_to :group
end
Rails, кажется, нравится приведенный выше код (по крайней мере, он не лает на него). Но потом происходит следующее:
> user = User.create(...) # valid user
> club = Club.create(...) # valid club
> user.founded_clubs = [club]
ActiveRecord::RecordInvalid: Validation failed: kind can't be blank
> club.founders << user
ActiveRecord::RecordInvalid: Validation failed: kind can't be blank
Я предполагал, что рельсы возьмут {'memberships.kind' => 'founder'}
часть моего кода и будут использовать ее при создании ассоциации, но, похоже, это не так. Таким образом, kind
нового членства пусто, и это вызывает ошибку.
Есть ли простой способ создать ассоциации, не создавая при этом полной боли?