Skip to content

Unable to modify the node of a combined assc. when a child of that assc. is combined. #676

@dhnaranjo

Description

@dhnaranjo

Describe the bug

When using nested combine you are unable to modify the node of the first level of nesting. This ones is best explained by the script, but there's a fair amount of setup. The juicy part:

arel.combine(bbb: :ccc).node(:bbb) { _1.select(:id) }
# => wrong argument type Symbol (expected Array)

To Reproduce

require "rom"
require "rom-sql"
require "dry-types"
require "sqlite3"

rom = ROM.container(:sql, 'sqlite::memory') do |config|
  config.default.create_table(:cccs) do
    primary_key :id
  end
  config.default.create_table(:bbbs) do
    primary_key :id
    Integer :ccc_id
  end
  config.default.create_table(:aaas) do
    primary_key :id
    Integer :bbb_id
  end
  config.relation(:cccs) do
    schema do
      attribute :id, Dry::Types["integer"]
      primary_key :id
    end
  end
  config.relation(:bbbs) do
    schema do
      attribute :id, Dry::Types["integer"]
      primary_key :id
      attribute :ccc_id, Dry::Types["integer"]

      associations do
        belongs_to :ccc
      end
    end
  end
  config.relation(:aaas) do
    schema do
      attribute :id, Dry::Types["integer"]
      primary_key :id
      attribute :bbb_id, Dry::Types["integer"]

      associations do
        belongs_to :bbb
      end
    end
  end
end

arel = rom.relations[:aaas]
brel = rom.relations[:bbbs]
crel = rom.relations[:cccs]

brel.changeset(:create, id: 1).commit
crel.changeset(:create, id: 1).commit
arel.changeset(:create, bbb_id: 1, ccc_id: 1).commit

arel.combine(bbb: :ccc).node(:bbb) { _1.select(:id) }
# => wrong argument type Symbol (expected Array)

Expected behavior

I can work with the first level node.

My environment

  • Affects my production application: no
  • Ruby version: 3.1.1
  • OS: M1 Mac

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    Backlog

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions