如何通过 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
计划提供新的界面来简化它,尽管我得说这种简单的命名约定对我来说效果很好。话虽如此,这里肯定有改进的地方。
希望对您有所帮助。
给定一个 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
计划提供新的界面来简化它,尽管我得说这种简单的命名约定对我来说效果很好。话虽如此,这里肯定有改进的地方。
希望对您有所帮助。