Ruby on rails Multiple通过两个不同的模型Rails与同一个模型有许多关系

Ruby on rails Multiple通过两个不同的模型Rails与同一个模型有许多关系,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我的rails应用程序中有一个模型: class Image < ActiveRecord::Base has_many :users, through: :sites has_many :users, through: :suppliers end class User < ActiveRecord::Base has_and_belongs_to_many :sites, -> { uniq } end class Site < ActiveRecor

我的rails应用程序中有一个模型:

class Image < ActiveRecord::Base
  has_many :users, through: :sites
  has_many :users, through: :suppliers
end
class User < ActiveRecord::Base
  has_and_belongs_to_many :sites, -> { uniq }
end

class Site < ActiveRecord::Base
  has_and_belongs_to_many :users
end

class Supplier < ActiveRecord::Base
  has_and_belongs_to_many :users
  has_and_belongs_to_many :images
end
类映像
显然,这段代码不起作用,因为第二行将覆盖第一行,但我正在说明我要实现的目标

其他类:

class Image < ActiveRecord::Base
  has_many :users, through: :sites
  has_many :users, through: :suppliers
end
class User < ActiveRecord::Base
  has_and_belongs_to_many :sites, -> { uniq }
end

class Site < ActiveRecord::Base
  has_and_belongs_to_many :users
end

class Supplier < ActiveRecord::Base
  has_and_belongs_to_many :users
  has_and_belongs_to_many :images
end
class用户{uniq}
结束
类站点
用户应该拥有他们通过自己的网站和供应商上传的图像。


是否有其他方法编写此文件,或者我是否需要重新配置现有设置。非常感谢您的帮助,如果您需要更多信息,请告诉我。

虽然我不太确定您的各种对象之间的关系,但我想我会通过以下方式解决此问题:

class User
  has_and_belongs_to_many :sites
  has_and_belongs_to_many :suppliers

  has_many :site_images, through: :sites
  has_many :supplier_images, through: :suppliers
end

class Site
  has_and_belongs_to_many :users
  has_many :images, as: :imageable
end

class Supplier
  has_and_belongs_to_many :users
  has_many :images, as: :imageable
end

class Image
  belongs_to :imageable, polymorphic: true
end
然后,您应该能够通过访问
@user.site\u images
@user.supplier\u images

来访问用户的图像。请尝试以下操作。。。(通过使用多态关联,您可以将其干燥)

类映像{uniq}
_和_属于_多个供应商吗
结束
类站点
只是想大声说出来。。。。为什么不起作用?在我看来,它似乎可以不经修改就工作。它工作正常,请查看图像嵌套属性。用户可以通过网站上传图像,但他们不拥有这些图像,因此无法编辑/删除它们。我认为图像模型中的第二个has_many覆盖了第一个我还将以下内容添加到图像模型中:has_many:site_用户,通过::sites,source::users;有多个:供应商用户,通过::供应商,来源::用户