Как получить колонку бабушки и дедушки в контроллере рельсов - PullRequest
0 голосов
/ 13 июня 2019

У меня есть три связанные таблицы: A, B, C. Ниже приведены отношения,

A принадлежит B, B имеет много A

B принадлежит C, C имеет много B


Я бы хотел получить данные to_json в моем контроллере А.

Я попробовал следующий код

class AController < ApplicationController

def get_data
    @a_datas = A.all
    events = []
    @a_datas.each do |a_data|
      events << {:id => a_data.id, :title => "#{a_data.B.try(:b_id)}" , :start => "#{a_data.start_date}",:end => "#{a_data.end_date}" }
    end
    render :text => events.to_json
  end

Код может правильно выводить идентификатор родителя по

"#{a_data.B.try(:B_id)}" 

Хотя я хочу получить идентификатор бабушки и дедушки (C.id) тем же методом

"#{a_data.B.C.try(:C_id)}"

Я получил undefined method `C' for nil:NilClass ошибку

Как я могу изменить код, чтобы получить значение идентификатора дедушки и бабушки?

Большое спасибо!

1 Ответ

0 голосов
/ 13 июня 2019

То, что вы говорите, не имеет смысла.Ваше сообщение об ошибке - undefined method `C' for nil:NilClass - говорит о том, что a_data.B равно нулю, поэтому я не уверен, как может работать родительский идентификационный код a_data.B.try(:B_id)?

Но чтобы ответить на ваш вопрос, каждыйa_data является экземпляром класса A, и вы пытаетесь вызвать родительский класс (B) в случае, когда вам нужна родительская ассоциация.

Предполагая, что ваши ассоциации соответствуют заявленным вами ...

class A
  belongs_to :b
end

class B
  belongs_to :c
end

Чтобы получить доступ к прародителю экземпляра A, вы должны сделать

    @a_datas.each do |a_data|
      events << {:id => a_data.id, :title => "#{a_data.b.try(:c_id)}" , :start => "#{a_data.start_date}",:end => "#{a_data.end_date}" }
    end

ИЛИ, если вы уверены, что a_data.b существует, вы можете сделать

    @a_datas.each do |a_data|
      events << {:id => a_data.id, :title => "#{a_data.b.c.try(:id)}" , :start => "#{a_data.start_date}",:end => "#{a_data.end_date}" }
    end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...