Дано:Как Карта многие ко многим Регистрация в Ruby-Mapper объектов
create_table(:foos) do
primary_key(:id)
String(:name)
end
create_table(:bars) do
primary_key(:id)
String(:name)
end
create_table(:foos_bars) do
primary_key(:id)
foreign_key(:foo_id, :foos)
foreign_key(:bar_id, :bars)
String(:name)
end
class Foos < ROM::Relation[:sql]
dataset :foos
def with_bars(id)
prefix('foos').qualified.select(
:foos__id, :foos__name
).select_append(
:bars__id, :bars__name
).left_join(
:foos_bars, foos_bars__bars_id: :foos__id
).left_join(
:bars, bars__id: :foos_bars__bars_id
).where(foos__id: id)
end
end
class FoosModel
include Virtus.model
attribute :id
attribute :name
attribute :bars
end
class BarsModel
include Virtus.model
attribute :id
attribute :name
attribute :foos
end
Я пробовал много, много случайных вариаций на ключевые слова, показанных в (но не объяснено) документацию ROM без толку , Вот буквальная интерпретация Документов в картограф для Фооса, который не работает:
class FoosMapper < ROM::Mapper
relation :foos
register_as :foos
model Foo
prefix('foos')
attribute :id
attribute :name
group :bars do
model Bar
attribute :id, from: :bar
attribute :name, from: :bar
end
end
Как один написать картограф (или переделки отношения к работе с картографом), чтобы получить простой результат foo с атрибутом bar, имеющим все бары, связанные таблицей foos_bars?
Это для Ruby on Rails или просто для автономной программы Ruby? – erapert
Это в Rails, хотя я не могу сказать, что видел много интеграции между ПЗУ и Rails - хорошая вещь в моем сознании, поэтому я был бы немного удивлен, если бы был затронут пул возможных ответов. –