1

给定一个 foo 表、一个 bar 表和一个 foos_bars 表,这三个表都带有 id 列,文档似乎暗示的使用 foos 获取 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 只适用于类,所以这实际上只是限定了“Foo”两次,但我们需要至少限定两个表才能进行可用的 SQL 查询。#prefix 似乎也是如此。省略 #qualified 和前缀只会导致不明确的 SQL 查询。

澄清一下:问题是如何通过 Ruby Object Mapper 中的连接表进行连接?

4

1 回答 1

1

您现在需要将符号列名称与 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

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

我希望这有帮助。

于 2015-11-07T12:33:52.857 回答