1

foo テーブル、bar テーブル、および foos_bars テーブル (3 つすべてに id 列がある場合) が与えられた場合、ドキュメントが暗示しているように見える foos でバーを取得する方法は次のようになります。

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" を 2 回修飾するだけですが、SQL クエリを使用するには少なくとも 2 つのテーブルを修飾する必要があります。#prefix も同様のようです。#qualified と prefix を省略すると、あいまいな 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 に答える