Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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有很多:虽然仍然_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails Rails有很多:虽然仍然

Ruby on rails Rails有很多:虽然仍然,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,让我们从如下代码开始: class User < ActiveRecord::Base has_many :photos has_many :submitted_photos has_many :posted_photos has_many :handshakes, through: :photos end class Photo < ActiveRecord::Base belongs_to :user end class PostedPhoto <

让我们从如下代码开始:

class User < ActiveRecord::Base
  has_many :photos
  has_many :submitted_photos
  has_many :posted_photos

  has_many :handshakes, through: :photos
end

class Photo < ActiveRecord::Base
  belongs_to :user
end

class PostedPhoto < Photo
  has_many :handshakes, inverse_of: :poster, foreign_key: 'poster_id'
end

class SubmittedPhoto < Photo
  has_many :handshakes, inverse_of: :submitter, foreign_key: 'submitter_id'
end

class Handshake < ActiveRecord::Base
  belongs_to :submitter, class_name: 'SubmittedPhoto'
  belongs_to :poster,    class_name: 'PostedPhoto'
end
class用户
STI部分以及照片和握手之间的关联工作正常。问题是通过用户的照片获得所有用户的握手


使用Rails上面的代码显然会抱怨model
Photo
没有名为
握手的关联。AR中是否有允许我指定此类关系的设施?如果没有,您将编写什么查询来获取它们?

您可以在
用户中使用:

has_many :submitted_handshakes, through: :submitted_photos, source: :handshakes
has_many :posted_handshakes, through: :posted_photos, source: :handshakes
我理解这与您的工作原理相同:

user.submitted_handshakes ----> user.submitted_photos.handshakes

显然,在提交的照片中不存在握手方法,但AR通过加入表格为您做到了这一点。

您可以在
用户中使用:

has_many :submitted_handshakes, through: :submitted_photos, source: :handshakes
has_many :posted_handshakes, through: :posted_photos, source: :handshakes
我理解这与您的工作原理相同:

user.submitted_handshakes ----> user.submitted_photos.handshakes

显然,在提交的照片中不存在握手方法,但AR通过加入表格为您实现了这一点。

我最终使用了以下代码,看起来是解决此问题的最简单的选择

class User
  def handshakes
    Handshake.where('submitter_id IN (?) OR poster_id IN (?)', submitted_photo_ids, posted_photo_ids)
  end
end

我最终使用了下面的代码,看起来是解决这个问题的最简单的选择

class User
  def handshakes
    Handshake.where('submitter_id IN (?) OR poster_id IN (?)', submitted_photo_ids, posted_photo_ids)
  end
end

为什么您不能将has_many:Handshake添加到照片模型中?您能否确认,您最终想要获取该用户发布或提交的所有照片(通过
Handshake
类)?这是正确的吗?我想获得所有的握手,其中任何用户的照片(已提交或已发布),如果是海报或握手的提交者。为什么您不能将has_mun:握手添加到照片模型中?您能否确认,您最终想要获得该用户已发布或已提交的所有照片(这是通过
握手
类实现的)?正确吗?我想在任何用户照片(提交或发布)的位置获得所有握手如果是发帖人还是提交人。是的,没错,但我不需要这种粒度。我要找的基本上是这两者的合并,在数据库/AR级别上。这两者的合并就是要有
有很多:握手
,它会返回所有
握手
,因为你没有查看
照片
ant为了避免在user中查看
照片
?如果我写
user.handshakes
你想返回
已发布的握手
已提交的握手
?请查看我在问题下对@Teeg的评论。对你的问题的回答基本上是两者都有。嗯,我想你已经得到了你想要的:
问题是通过用户的照片获取所有用户的握手。
在您的评论中,
我想获取所有握手,如果用户的照片是海报或握手提交者。
是的,没错,但我不需要这种粒度。我要找的基本上是数据库/AR级别上这两个的合并。这些合并第二个是拥有
has\u many:handshakes
并返回所有
handshakes
,因为您没有对
photos
进行范围限定。您想避免在user中对
photos
进行范围限定吗?如果我写
user.handshakes
您想返回
发布的\u handshakes
提交的\u handshakes
?请查看我的评论在回答@Teeg的问题下。对你的问题的回答基本上是两者都有。嗯,我想你已经得到了你想要的:
问题是通过他的照片来获得所有用户的握手。
在你的评论中
我想获得所有用户的握手,如果是海报或握手提交者。