-
-
Notifications
You must be signed in to change notification settings - Fork 94
Open
Labels
Description
Describe the bug
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
Outputs:
✅ articles.combine(:tags).first:
{:id=>1, :title=>"First", :tags=>[{:id=>1, :article_id=>1, :value=>"worst"}]}
❌ articles.combine(:tags).last: (MISSING TAGS!)
{:id=>2, :title=>"Second"}
✅ articles.combine(:tags).reverse.first:
{:id=>2, :title=>"Second", :tags=>[{:id=>2, :article_id=>2, :value=>"best"}]}
Expected behavior
I would expect it would work just like articles.combine(:tags).reverse.first
.
My environment
- Rom-sql 3.6
- Affects my production application: No
- Ruby version: 3.3
- OS: macOS 14.4.1