【问题标题】:Rails HABTM reading unique recordsRails HABTM 读取唯一记录
【发布时间】: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


    【解决方案1】:

    如果一个 Client 可以有多个 Announcement,但一个 Announcement 只能属于一个 Client,那么使用:

    Client:
    
    has_many :announcements
    
    Announcement:
    
    belongs_to :client
    

    这会将它保存在 ActiveRecord 中。您可以通过一些快速方法调用找到给定客户端的公告。向下滚动到“关联加入模型”,例如:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

    【讨论】:

      【解决方案2】:

      为什么不创建一个连接表来处理您的客户端和公告模型之间的多对多关系?比如:

      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

      【讨论】:

      • 感谢您的回答,但我不太确定我是否理解 :) 公告不能跨越多个客户。我已经让这个东西工作了,但这涉及到很多 ruby​​ 代码和多个我想消除的数据库命中。我在 ActiveRecord 中寻找一些东西。但我想,没有直接的方法可以做到这一点,无需创建新的关系。
      【解决方案3】:

      您可以使用 habtm 上的 uniq 符号创建新关系

      has_and_belongs_to_many :uniq_announcements, :source=>:announcements, :uniq=>true
      

      或者只是简单地调用 uniq!

      project.announcements.uniq
      

      【讨论】:

        猜你喜欢
        • 2014-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多