gpt4 book ai didi

ruby-on-rails - rails : has_many through association - did I get this right?

转载 作者:数据小太阳 更新时间:2023-10-29 08:13:35 25 4
gpt4 key购买 nike

我使用 Rails 3.1 构建了一个照片共享 Web 应用程序。我只是想验证我的关联是否正确。

一些上下文:一个用户有很多共享。一个 Share 有一个 User(即“sharer”)、一个 Photo 和许多 ReceiverReceiver 是任意的 User

我使用直通关联的原因很简单,因为我想为共享照片的每个接收者存储额外的数据。

class Photo < ActiveRecord::Base
has_many :shares
end

class Receiver < ActiveRecord::Base
belongs_to :share
belongs_to :user
end

class Share < ActiveRecord::Base
belongs_to :photo
belongs_to :user
has_many :receivers
has_many :users, :through => :receivers
end

class User < ActiveRecord::Base
has_many :receivers
has_many :shares, :through => :receivers
end

然后可以使用 shares 类方法检索 User 共享的照片吗?

User.first.shares
# => [<#Share:0x000>, ...]

然后可以使用 receivers 类方法检索 User 收到的共享吗?

User.first.receivers
# => [<#Receiver:0x000>, ...]

我做对了吗?

最佳答案

我刚才做了类似的事情,我没有测试这段代码,所以试一试,看看它是否真的是你需要的,它可能会为你指明正确的方向。

如果你的工作我没有看到改变它的意义,这段代码有点复杂但你没有 Receiver 模型,一切都通过 Share 模型。

class User < ActiveRecord::Base
has_many :shares_links, :class_name => "Share", :foreign_key => :sharing_id, :dependent => :destroy
has_many :receiver_links, :class_name => "Share", :foreign_key => :shared_to_id, :dependent => :destroy

has_many :shares, :through => :shares_links
has_many :receivers, :through => :receiver_links
end

class Share < ActiveRecord::Base
belongs_to :sharing, :validate => true, :class_name => "User", :foreign_key => :sharing_id
belongs_to :shared_to, :validate => true, :class_name => "User", :foreign_key => :shared_to_id

has_one :photo
end

class Photo < ActiveRecord::Base
belongs_to :photo
end

User.first.shares
User.first.receivers
User.first.receivers.first.photo

关于ruby-on-rails - rails : has_many through association - did I get this right?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7491050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com