Using #last on a Relation, after a using #combine, ignores the combine and just returns the regular tuple.
To Reproduce
require "rom"
Types = Dry.Types()
module Structs
class Article < ROM::Struct
# Including `title` and `body` is optional, we are able to declare struct-only attributes
# If you comment these two lines out, we get the same result and same error
attribute :title, Types::String
attribute :body, Types::String
attribute :favorites_count, Types::Integer
end
end
rom = ROM.container(:sql, "sqlite::memory") do |conf|
conf.default.create_table(:articles) do
primary_key :id
column :title, String, null: false
end
conf.default.create_table(:tags) do
primary_key :id
foreign_key :article_id
column :value, String, null: false
end
conf.relation(:articles) do
schema(infer: true) do
associations do
has_many :tags
end
end
end
conf.relation(:tags) do
schema(infer: true) do
associations do
belongs_to :article
end
end
end
end
articles = rom.relations[:articles]
tags = rom.relations[:tags]
articles.combine(:tags).command(:create).call(title: "First", tags: [{value: "worst"}])
articles.combine(:tags).command(:create).call(title: "Second", tags: [{value: "best"}])
puts "✅ articles.combine(:tags).first:"
puts " " + articles.combine(:tags).first.inspect
puts
puts "❌ articles.combine(:tags).last: (MISSING TAGS!)"
puts " " + articles.combine(:tags).last.inspect
puts
puts "✅ articles.combine(:tags).reverse.first:"
puts " " + articles.combine(:tags).reverse.first.inspect
Describe the bug
Using
#last
on a Relation, after a using#combine
, ignores thecombine
and just returns the regular tuple.To Reproduce
Outputs:
Expected behavior
I would expect it would work just like
articles.combine(:tags).reverse.first
.My environment
Related issues
https://github.com/rom-rb/rom-sql/issues/64