Undefined method `macro' for nil:NilClass

this error usually occurs when trying to mix 1st and 2nd order
relationships in a single to_json call:

undefined method `macro’ for nil:NilClass

Rails 3 has this way to support 2nd order relationships:

http://apidock.com/rails/ActiveRecord/Serialization/to_json

So I try to use it:

    @units = User.where(:id =>

params[:user_id]).first.units.to_json(:include => {
:only => :reports,
:notifications => {:include => {:only
=> :notification_codes} }
})

A unit has many reports and notifications. And a notification belongs
to notification code.

This is the relationship between notifications and notification codes:

//notifications
belongs_to :notification_code, :foreign_key => :code

//notification codes
has_many :notifications

So I am not sure why error occurs.

Thanks for response

Hi!

The call to to_json shouldn’t be the last call in the statement?

Regards,
Everaldo

It was working fine until I added the 2nd order relationship. The
documentation isnt clear about how to add the 2nd order relationship

On Nov 15, 11:06pm, John M. [email protected] wrote:

@units = User.where(:id =>

params[:user_id]).first.units.to_json(:include => {
:only => :reports,
:notifications => {:include => {:only
=> :notification_codes} }
})

A unit has many reports and notifications. And a notification belongs
to notification code.

There is an example of second order include & only on the page you
link to. You’re using :only to refer to association names whereas only
is supposed to denote which attributes you want to show for a given
object so i think you are confusing to_json. something like :include
=> {:reports, :notifications => :notification_codes} should do the
trick.

Fred

:include => {:notifications, :only => :reports, :include => {:

On Nov 16, 1:46pm, John M. [email protected] wrote:

thanks for response

THis here would produce syntax error:

:include => {:reports, :notifications => :notification_codes}

oops, that should have been [:reports, {:notifications
=> :notification_codes}]

also, if notification belongs_to :notification code, then it should be

[:reports, {:notifications => :notification_code}]

i.e. the symbols in that hash should exactly match the name given to
the has_many, belongs_to etc.

Fred

Frederick C. wrote in post #1032161:

On Nov 16, 1:46pm, John M. [email protected] wrote:

thanks for response

THis here would produce syntax error:

:include => {:reports, :notifications => :notification_codes}

oops, that should have been [:reports, {:notifications
=> :notification_codes}]

also, if notification belongs_to :notification code, then it should be

[:reports, {:notifications => :notification_code}]

i.e. the symbols in that hash should exactly match the name given to
the has_many, belongs_to etc.

Fred

thanks for response,

this is what ultimately worked for me:

Unit.where(:id => params[:unit_id]).first.reports.to_json(:include => {
:notifications => {
:include => {
:notification_code => {
:only => :name }
}
} })
As you mentioned, this would only include the “name” attribute of
notification code, but anything else I tried was still giving the
“macro” error.

thanks for response

THis here would produce syntax error:

:include => {:reports, :notifications => :notification_codes}

So I try this (to ensure :reports has a value):

{:include => {:reports => {}, :notifications => :notification_codes}}

And this is ultimately what it would look like:

User.where(:id => params[:user_id]).first.units.to_json({:include =>
{:reports => {}, :notifications => :notification_codes}})

But this will say:

can’t convert Symbol into Hash

On Nov 16, 3:14am, Frederick C. [email protected]