attributes=
can use aliases.
but, attributes
doesn’t return aliases, so you can’t get aliases.
e.g.
Define ModelA and ModelB as follows:
class ModelA
include ActiveModel::Model
include ActiveModel::Attributes
attribute :common_1
attribute :common_2
attribute :model_a_column
end
class ModelB
include ActiveModel::Model
include ActiveModel::Attributes
attribute :common_1
attribute :common_2
attribute :model_b_column
alias_attribute :model_a_column, :model_b_column
end
I want to use alias “model_a_column”, but model_b.attributes
doesn’t return “model_a_column”.
% rails console
Loading development environment (Rails 7.0.4.3)
irb(main):001:0> model_a = ModelA.new
=>
#<ModelA:0x00007fb499a76e58
...
irb(main):002:0> model_b = ModelB.new
=>
#<ModelB:0x00007fb4978dcfe0
...
irb(main):003:0> attr = { "common_1" => "c1", "common_2" => "c2", "model_a_column" => "a_col" }
=> {"common_1"=>"c1", "common_2"=>"c2", "model_a_column"=>"a_col"}
irb(main):004:0> model_a.attributes = attr
=> {"common_1"=>"c1", "common_2"=>"c2", "model_a_column"=>"a_col"}
irb(main):005:0> model_a.attributes
=> {"common_1"=>"c1", "common_2"=>"c2", "model_a_column"=>"a_col"}
irb(main):006:0> model_b.attributes = attr
=> {"common_1"=>"c1", "common_2"=>"c2", "model_a_column"=>"a_col"}
irb(main):007:0> model_b.attributes
=> {"common_1"=>"c1", "common_2"=>"c2", "model_b_column"=>"a_col"}
irb(main):008:0> model_a.attributes.slice(*attr.keys)
=> {"common_1"=>"c1", "common_2"=>"c2", "model_a_column"=>"a_col"}
irb(main):009:0> model_b.attributes.slice(*attr.keys)
=> {"common_1"=>"c1", "common_2"=>"c2"}
I expect model_b.attributes
to return ailias, like this:
irb(main):011:0> model_b.attributes.merge(model_b.attribute_aliases.transform_values { |v| model_b.send(v) })
=> {"common_1"=>"c1", "common_2"=>"c2", "model_b_column"=>"a_col", "model_a_column"=>"a_col"}
irb(main):012:0> model_b.attributes.merge(model_b.attribute_aliases.transform_values { |v| model_b.send(v) }).slice(*attr.keys)
=> {"common_1"=>"c1", "common_2"=>"c2", "model_a_column"=>"a_col"}
System configuration
Rails version: 7.0.4.3
Ruby version: 3.2.2