以下是我拥有的模型的摘录:
class User < ActiveRecord::Base
has_many :participations
has_many :groups, through: :participations
has_many :subgroups, through: :participations
end
class Group < ActiveRecord::Base
has_many :participations
has_many :users, through: :participations
has_many :subgroups
end
class Subgroup < ActiveRecord::Base
has_many :participations
has_many :users, through: :participations
end
class Participation < ActiveRecord::Base
belongs_to: :user
belongs_to: :group
belongs_to: :subgroup
validates :user, presence: true
validates :group, presence: true
# Subgroup can be empty, as long as user as not been placed.
# There should be only one participation per couple User:Group
validates_uniqueness_of :group_id, :scope => [:user_id]
# Also has a state-machine, describing the participation status.
end
说明:组被分成子组,用户选择他们加入的组,而不是由管理员稍后选择的子组。当用户被添加到组(group_a.users << user_a
)时,ActiveRecord会自动创建一个参与。我希望当相同的用户被添加到该组的子组(具有subgroup_1
的group_a
的子组的subgroup_1.users << user_a
)时,相同的参与被重用。
实际发生的情况是ActiveRecord试图创建一个新的参与记录,这与之前创建的记录冲突(validates_uniqueness_of :group_id, :scope => [:user_id]
会触发一个错误)。
有没有什么办法可以让我做这件事?我尝试连接before_validation、before_save和其他一些东西,但每次尝试都失败了。
也许有一种更好的方法来模拟这种关系?
欢迎任何帮助。
谢谢,
大卫
发布于 2013-12-04 12:40:42
您可以通过调用以下方法来耗尽所有代码
class User < ActiveRecord::Base
has_many :participations
has_many :groups, through: :participations
has_many :subgroups, through: :groups # HMT -> HMT
end
这能解决你的问题吗?这个可能不能扩展,但我们稍后会担心这个问题:)。
https://stackoverflow.com/questions/20366194
复制相似问题