【问题标题】:Combining postgres_ext (or Rails 4) arrays with associations将 postgres_ext(或 Rails 4)数组与关联相结合
【发布时间】:2013-03-14 04:53:16
【问题描述】:

我正在尝试在标签(tags 表中)和项目(items 表中)之间建立多对多关系,在每个项目上使用 integer[] 类型的字段。

我知道 Rails 4(和通过 postgres_ext 的 Rails 3)通过 :array => true 参数支持 Postgres 的数组功能,但我不知道如何将它们与 Active Record 关联结合起来。

has_many 有这个选项吗?有这个宝石吗?我是否应该放弃并只创建一个has_many :through 关系(尽管我预期的关系数量可能无法管理)?

【问题讨论】:

    标签: postgresql rails-activerecord ruby-on-rails-4 postgres-ext


    【解决方案1】:

    目前,还没有办法在 Rails 中使用与数组的关系。但是,使用选定的答案,您将遇到 N+1 选择问题。假设你得到你的帖子,然后在每个帖子上使用类中定义的“标签”方法为其添加标签。对于您调用标签的每个帖子,您将招致另一个数据库命中。

    希望这在未来会有所改变,我们可以摆脱连接表(特别是考虑到 Postgres 9.4 将支持数组中的外键)。

    【讨论】:

      【解决方案2】:

      你真正需要做的就是

      def tags
        Tag.where(id: tag_ids)
      end
      
      def add_tag(tag)
        self.tag_ids += [tag.id] unless tag_ids.include?(tag.id)
      end
      

      至少我现在是这样做的。我用哈希(hstore)和权限做了一些很酷的东西。处理标签的一种方法是通过创建 has_many 并将标签持久保存在字符串数组列中,因为它们是为了方便和性能而添加的(不必为了获取名称而查询 2 个相关表)。我不一定要使用活动记录来对数据库做一些很酷的事情。

      【讨论】:

        猜你喜欢
        • 2016-03-20
        • 1970-01-01
        • 1970-01-01
        • 2012-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-08
        • 1970-01-01
        相关资源
        最近更新 更多