Hi!
I wanted to get some feedback on the idea of enhancing the ActiveRecord attributes
method to also (optionally) return nested attributes
Example
Let’s say I have a Car
model, which has_one
Driver
and has_many
Passenger
(s).
Also let’s say the Car
model accepts_nested_attributes
for both the Driver
and Passenger
models.
A normal call to @car.attributes
might result in
{
id: “5”,
make: “Saab”,
model: “9-3”,
year: “2008”,
automatic_transmission: true
}
The change would be to allow attributes
to also return the nested sub-hashes. So @car.attributes(include_nested: true)
would result in something like
{
id: “5”,
make: “Saab”,
model: “9-3”,
year: “2008”,
automatic_transmission: true
driver_attributes: {
name: "Foo Bar",
age: 27
},
passengers_attributes: {
"0" => {
name: "Foo Bar1",
height_cm: 170
},
"1" => {
name: "Foo Bar2",
height_cm: 195
}
}
}
When working with Rails forms or form tests it seems handy to have the ability to generate all the attributes. This mirrors the behavior of attributes=
which can read a nested attributes hash as well.
This change would also follow the action* gem standard of whitelisting and blacklisting certain associations
@car.attributes(include_nested: { only: [:passengers] })
@car.attributes(include_nested: { except: [:passengers] })
This is my first time contributing to the rails core, so would love to know what everyone thinks.
Thanks!