Relation#last removes combines
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 42/100
Research direction
Start with the reproduction in the issue and trace the Relation#last, combine, and reverse.first entry points. Compare how these operations load combined tags, then verify that articles.combine(:tags).last includes the associated tags just like reverse.first. The issue provides no test file or implementation path, so locate the relevant relation tests before making changes.
Written by the indexing model from the issue text.
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
Related issues
- Dominant language
- Ruby
- Stars
- 220
- Forks
- 97
- PR merge metrics
- No merged PRs in 30d
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from rom-rb/rom-sql
-
bug help wanted
Difficulty 4/5 3-5 days Newbie friendliness 42/100
-
bug help wanted
Difficulty 3/5 1-2 days Newbie friendliness 48/100
-
bug help wanted
Difficulty 4/5 3-5 days Newbie friendliness 42/100
-
bug help wanted
Difficulty 3/5 1-2 days Newbie friendliness 45/100
-
bug help wanted
Difficulty 4/5 3-5 days Newbie friendliness 35/100
Similar issues
-
バグ
Difficulty 1/5 Under an hour Newbie friendliness 92/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
voxpupuli/puppet-epel#186 · 1 comment ·
-
external_created_at is no longer used for the message timestamp since the new message UI (v4.4.0) OpenBug Frontend
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
TheOdinProject/curriculum#31402 · 1 comment ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100