Ruby on rails Rails 4:Amistad gem打破多态关联
我有一个用户模型,我在其中使用。到目前为止一切正常。 在我的应用程序中,我还有一个Ruby on rails Rails 4:Amistad gem打破多态关联,ruby-on-rails,gem,associations,amistad,Ruby On Rails,Gem,Associations,Amistad,我有一个用户模型,我在其中使用。到目前为止一切正常。 在我的应用程序中,我还有一个members表,其中只有两个字段:user\u id和group\u id 由于我需要使用此members表来存储社区成员,因此我决定将其设置为多态表: class CreateMembers < ActiveRecord::Migration def change create_table :members do |t| t.integer :user_id t.str
members
表,其中只有两个字段:user\u id
和group\u id
由于我需要使用此members
表来存储社区成员,因此我决定将其设置为多态表:
class CreateMembers < ActiveRecord::Migration
def change
create_table :members do |t|
t.integer :user_id
t.string :memberable_type
t.integer :memberable_id
end
end
end
到目前为止,所有协会都运作良好。但是,由于我的成员
表将包含组
和社区
,因此我需要能够检索我所属的所有组。因此,在我的用户模型中,我做到了:
class User < ActiveRecord::Base
has_many :members
has_many :groups, through: :members, source: :memberable, source_type: 'Group'
has_many :created_groups, class_name: Group
end
但正如我在标题和上文开头提到的,我正在使用,所以我将其包括在内:
class User < ActiveRecord::Base
include Amistad::FriendModel
has_many :members
has_many :groups, through: :members, source: :memberable, source_type: 'Group'
has_many :created_groups, class_name: Group
end
注意最后一行:和groups.memberable\u type='Group'
。我试着查看宝石内部,但没有找到冲突的原因
有什么想法吗,伙计们
编辑我用叉子叉起宝石,试图四处乱砍。看来gem使用的是
squel
,这正是这个问题的根源
编辑2是啊,我找到了解决办法。在我的
会员
模型中,我曾经拥有:
class Member < ActiveRecord::Base
belongs_to :user
belongs_to :memberable, polymorphic: true
end
好吧,我问了这个问题一会儿,结果发现上面的方法不起作用。实际上,我需要从Amistad gem上的
friend\u模型/friends
中删除squel
可在以下位置找到修补程序的分叉版本:
class User < ActiveRecord::Base
include Amistad::FriendModel
has_many :members
has_many :groups, through: :members, source: :memberable, source_type: 'Group'
has_many :created_groups, class_name: Group
end
SELECT `groups`.*
FROM `groups`
INNER JOIN `members` ON `groups`.`id` = `members`.`memberable_id`
WHERE `members`.`user_id` = 1
AND `groups`.`memberable_type` = 'Group'
class Member < ActiveRecord::Base
belongs_to :user
belongs_to :memberable, polymorphic: true
end
class Member < ActiveRecord::Base
belongs_to :user
belongs_to :memberable, polymorphic: true, foreign_type: 'members.memberable_type'
end