Невозможно предложить какое-либо решение, если не указана версия используемых библиотек. Для rom-sql 2.4.0
это просто работает:
#!/usr/bin/env ruby
# frozen_string_literal: true
require 'bundler/inline'
gemfile(false) do
source 'https://rubygems.org'
gem 'sqlite3'
gem 'rom-sql', '2.4.0'
gem 'rspec'
end
require 'rspec'
require 'rspec/autorun'
require 'dry-types'
require 'rom-sql'
require 'sqlite3'
RSpec.describe do
let(:uri) { 'sqlite::memory' }
let(:conn) { Sequel.connect(uri) }
let(:conf) { ROM::Configuration.new(:sql, conn) }
let(:container) { ROM.container(conf) }
let(:avatars) { container.relations[:avatars] }
let(:users) { container.relations[:users] }
before do
conn.create_table(:avatars) do
primary_key :id
Integer :user_id
String :url
end
conn.create_table(:users) { primary_key :id }
conf.relation(:avatars) do
schema(infer: true) do
associations do
belongs_to :user
end
end
end
conf.relation(:users) do
schema(infer: true) do
associations do
has_many :avatars
end
end
end
end
subject(:relation) do
users.join(:avatars).select { relations[:avatars][:url].as(:avatar_url) }
end
it do
users.insert
avatars.insert(user_id: 1, url: 'avatars/1')
avatars.insert(user_id: 1, url: 'avatars/2')
expect { relation.pluck(:avatar_url) }.not_to raise_error
expect(relation.pluck(:avatar_url)).to eq ['avatars/1', 'avatars/2']
end
end