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

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

Search Discussions

  • Everaldo Gomes at Nov 15, 2011 at 11:21 pm
    Hi!

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

    Regards,
    Everaldo
    On Tue, Nov 15, 2011 at 9:06 PM, John Merlino wrote:

    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

    --
    You received this message because you are subscribed to the Google Groups
    "Ruby on Rails: Talk" group.
    To post to this group, send email to rubyonrails-talk@googlegroups.com.
    To unsubscribe from this group, send email to
    rubyonrails-talk+unsubscribe@googlegroups.com.
    For more options, visit this group at
    http://groups.google.com/group/rubyonrails-talk?hl=en.
    --
    You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
    To post to this group, send email to rubyonrails-talk@googlegroups.com.
    To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
    For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
  • John Merlino at Nov 16, 2011 at 12:02 am
    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, 6:20 pm, Everaldo Gomes wrote:
    Hi!

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

    Regards,
    Everaldo






    On Tue, Nov 15, 2011 at 9:06 PM, John Merlino wrote:
    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
    --
    You received this message because you are subscribed to the Google Groups
    "Ruby on Rails: Talk" group.
    To post to this group, send email to rubyonrails-talk@googlegroups.com.
    To unsubscribe from this group, send email to
    rubyonrails-talk+unsubscribe@googlegroups.com.
    For more options, visit this group at
    http://groups.google.com/group/rubyonrails-talk?hl=en.
    --
    You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
    To post to this group, send email to rubyonrails-talk@googlegroups.com.
    To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
    For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
  • Frederick Cheung at Nov 16, 2011 at 8:15 am

    On Nov 15, 11:06 pm, John Merlino wrote:
    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.
    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 => {:
    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
    --
    You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
    To post to this group, send email to rubyonrails-talk@googlegroups.com.
    To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
    For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
  • John Merlino at Nov 16, 2011 at 1:59 pm
    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:14 am, Frederick Cheung wrote:
    On Nov 15, 11:06 pm, John Merlino wrote:








    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.
    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 => {:






    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
    --
    You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
    To post to this group, send email to rubyonrails-talk@googlegroups.com.
    To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
    For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
  • Frederick Cheung at Nov 16, 2011 at 2:29 pm

    On Nov 16, 1:46 pm, John Merlino 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
    --
    You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
    To post to this group, send email to rubyonrails-talk@googlegroups.com.
    To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
    For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
  • John Merlino at Nov 18, 2011 at 3:09 pm

    Frederick Cheung wrote in post #1032161:
    On Nov 16, 1:46pm, John Merlino 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.

    --
    Posted via http://www.ruby-forum.com/.

    --
    You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
    To post to this group, send email to rubyonrails-talk@googlegroups.com.
    To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
    For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouprubyonrails-talk @
categoriesrubyonrails
postedNov 15, '11 at 11:19p
activeNov 18, '11 at 3:09p
posts7
users4
websiterubyonrails.org
irc#RubyOnRails

People

Translate

site design / logo © 2021 Grokbase