Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4:Amistad gem打破多态关联_Ruby On Rails_Gem_Associations_Amistad - Fatal编程技术网

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