如何通过 Ruby 对象映射器 SQL 中的联接 Table 联接

How to Join Through a Join Table in Ruby Object Mapper SQL

给定一个 foo table、一个 bar table 和一个 foos_bars table,所有三个都有 id 列,使用 foo 获取 bar 的方法是文档似乎暗示是这样的:

class Foo < ROM::Relation[:sql]
  def with_foos_bars
    qualified.inner_join(:foos_bars, foo_id: :id)
  end

  def with_bars
    with_category_fixtures.qualified.inner_join(:categories, id: :bar_id)
  end
end

但是,#qualified只适用于class,所以这实际上只是限定了"Foo"两次,但是我们需要至少限定两个table才能获得一个可用 SQL 查询。 #prefix 似乎也是如此。省略#qualified 和前缀只会导致不明确的 SQL 查询。

澄清一下:问题是如何通过 Ruby 对象映射器中的联接 table 进行联接?

您现在需要使用符合 Sequel 命名约定的符号列名称,因此如下所示:

class Foo < ROM::Relation[:sql]
  def with_foos_bars
    qualified.inner_join(
      foos_bars, foos_bars__foo_id: foos__id
    )
  end

  def with_bars
    with_category_fixtures.qualified.inner_join(
      :categories, categories__id: :foos_bars__bar_id
    )
  end
end

计划提供新的界面来简化它,尽管我得说这种简单的命名约定对我来说效果很好。话虽如此,这里肯定有改进的地方。

希望对您有所帮助。