Как я могу добавить свойство к дочерней ассоциации перед рендерингом?

У меня есть модель учителя который has_many студенты. Когда я представляю студента (как json), я хочу разделить teacher_id свойство и заменить его именем учителя в моем представлении.

Что лучший способ состоит в том, чтобы достигнуть этого?

Удачи,

Chris

1
задан ChrisInCambo 19 May 2010 в 03:27
поделиться

2 ответа

Вы всегда можете переопределить метод to_json в модели, чтобы делать все, что хотите:

class Student < ActiveRecord::Base
  def to_json
    self.attributes.merge(
      'teacher_id' => self.teacher.name
    ).to_json
  end
end

Обновление: На основе отзывов от kandadaboggu , используя другой подход :

class Student < ActiveRecord::Base
  def teacher_name
    self.teacher and self.teacher.name
  end

  def to_json(options = { })
    super(
      {
        :methods => :teacher_name,
        :except => :teacher_id)
      }.merge(options)
    )
  end
end

Обратите внимание, что при использовании такого слияния методом перебора результат иногда бывает менее чем удовлетворительным, но он будет служить для случая по умолчанию. Если вы укажете: methods или: except собственные параметры, значения по умолчанию будут проигнорированы.

0
ответ дан 3 September 2019 в 00:28
поделиться

Определите метод с именем имя_ учителя .

class Student < ActiveRecord::Base
  def teacher_name
    self.teacher.name
  end
end

Включите метод teacher_name при вызове to_json :

teacher.to_json(:include => {:students => {:methods=> :teacher_name, 
                                           :except => :teacher_id
                                          }
                            }
                )
2
ответ дан 3 September 2019 в 00:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: