Как получить доступ к данным таблицы ': has_many: Хотя' при использовании to_json? - PullRequest
3 голосов
/ 08 августа 2010

У меня есть три модели (здесь упрощенно):

class Child < ActiveRecord::Base
  has_many    :childviews, :dependent => :nullify
  has_many    :observations, :through => :childviews  
end
class Childview < ActiveRecord::Base
  belongs_to  :observation
  belongs_to  :child
end
class Observation < ActiveRecord::Base
  has_many    :childviews, :dependent => :nullify
  has_many    :children, :through => :childviews
end

Я отправляю это на некоторый JavaScript-код с помощью метода to_json Rails, например так:

render :layout => false , :json => @child.to_json(
  :include => {
    :observations => {
      :include => :photos, 
      :methods => [:key, :title, :subtitle]
    }
  },
  :except => [:password]
)

Это прекрасно работает.Наблюдения извлекаются в порядке «через» таблицу соединений (childviews).

Однако , я также хочу получить данные, которые находятся в таблице соединений childviews;в частности значение 'needs_edit'.

Я не могу понять, как получить эти данные в вызове to_json.

Кто-нибудь может мне помочь?Большое спасибо заранее.

qryss

Ответы [ 2 ]

7 голосов
/ 09 августа 2010

Не уверен, но разве это не должно работать?

@child.to_json(
  :include => {
    :observations => {
      :include => :photos, 
      :methods => [:key, :title, :subtitle]
    },
    :childviews => { :only => :needs_edit }
  }, 
  :except => [:password]
)

РЕДАКТИРОВАТЬ: Это может также работать, так как childviews принадлежит чрезмерному:

@child.to_json(
  :include => {
    :observations => {
      :include => { :photos, :childviews => { :only => :needs_edit } } 
      :methods => [:key, :title, :subtitle]
    }
  }, 
  :except => [:password]
)
2 голосов
/ 09 августа 2010

Спасибо Року за указатели - теперь он работает!

Этот код:

@child.to_json(:include => 
  {
    :observations => {
      :include => {
        :photos => {},
        :childviews => {:only => :needs_edit}
      }, 
      :methods => [:S3_key, :title, :subtitle]
    }     
  },
  :except => [:password]
)

дает мне этот вывод (сокращенно для ясности):

{
    "child":
    {
        "foo":"bar",
        "observations":
        [
            {
                "foo2":"bar2",
                "photos":
                [
                    {
                        "foo3":"bar3",
                    }
                ],
                "childviews":
                [
                    {
                        "needs_edit":true
                    }
                ]
            }
        ]
    }
}

Спасибо, Рок! Это было моей головой.

:)

qryss

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...