【发布时间】:2010-12-28 21:43:06
【问题描述】:
这就是我所拥有的。
client has_many branches
branch has_many projects
project has_and_belongs_to_many announcements
有没有更简单的方法可以找到给客户的公告?
我需要一组独特的公告。
【问题讨论】:
标签: ruby-on-rails has-and-belongs-to-many
这就是我所拥有的。
client has_many branches
branch has_many projects
project has_and_belongs_to_many announcements
有没有更简单的方法可以找到给客户的公告?
我需要一组独特的公告。
【问题讨论】:
标签: ruby-on-rails has-and-belongs-to-many
如果一个 Client 可以有多个 Announcement,但一个 Announcement 只能属于一个 Client,那么使用:
Client:
has_many :announcements
Announcement:
belongs_to :client
这会将它保存在 ActiveRecord 中。您可以通过一些快速方法调用找到给定客户端的公告。向下滚动到“关联加入模型”,例如:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
【讨论】:
为什么不创建一个连接表来处理您的客户端和公告模型之间的多对多关系?比如:
Client:
has_many :announcements, :through => :client_announcements
Announcement:
has_many :clients, :through => :client_announcements
ClientAnnouncements:
belongs_to :client
belongs_to :project
然后您可以设置一个对象来查找附加到特定客户端 ID 的公告,反之亦然。
PS:答案可能并不详尽,我不是原生 Rails 开发人员 - 查看 API 文档以获取我所接触的示例:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
【讨论】:
您可以使用 habtm 上的 uniq 符号创建新关系
has_and_belongs_to_many :uniq_announcements, :source=>:announcements, :uniq=>true
或者只是简单地调用 uniq!
project.announcements.uniq
【讨论】: