#attributes should optionally return nested attributes of the model

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!