#ruby-on-rails #json #rabl
#ruby-on-rails #json #rabl
Вопрос:
В настоящее время я использую rabl-rails 0.5.3 и Rails 4.2.6
У меня возникла эта проблема, когда я пытаюсь отобразить коллекцию объектов моего колледжа из метода index контроллера Rails.
Вот упрощенная версия метода index в моем контроллере:
def index
@colleges = College.all
puts @colleges.count
render 'api/data_bridge/colleges/show'
end
Я вижу ‘100’ для вывода инструкции puts там. Some явно @colleges не является пустым.
Вот шаблон индекса rabl:
puts "---===========================-"
puts @colleges.inspect
puts "---===========================-"
collection @colleges
В выводе моего сервера я вижу, что эти операторы puts выглядят как:
---===========================-
nil
---===========================-
Когда я сбрасываю @colleges в контроллере, это определенно не nil. Я не могу понять, что произошло с данными между контроллером и шаблоном.
Ответ №1:
Документация в качестве источника для моих утверждений: https://github.com/ccocchi/rabl-rails#overview
Ваш файл rabl должен выглядеть следующим образом:
puts "---===========================-"
puts :@colleges.inspect
puts "---===========================-"
collection :@colleges
Это был их пример:
# app/views/post/index.rabl
collection :@posts
attributes :id, :title, :subject
child(:user) { attributes :full_name }
node(:read) { |post| post.read_by?(@user) }
Обратите пристальное внимание на «:» перед символом. Вот почему:
Факт компиляции шаблона вне какого-либо контекста рендеринга не позволяет нам использовать какие-либо переменные экземпляров (за исключением node) в шаблоне, потому что они являются объектами рендеринга. Поэтому вместо этого вам придется использовать символы этих переменных.Например, чтобы отобразить коллекцию @posts внутри вашего PostController, вам нужно использовать :@posts внутри шаблона.
Комментарии:
1. отлично. Это приблизило меня на шаг. Теперь я получаю сообщение об ошибке «Неизвестный первичный ключ для table college в model College». Первичным ключом в этой модели является ‘college_id’ вместо ‘id’. Я попытался указать
set_primary_key = 'college_id'
в модели, но в любом случае выдает ту же ошибку2. Пожалуйста, отметьте это как решенное, если я решил вашу исходную проблему! Вы действительно должны просто придерживаться соглашения. Не переопределяйте это в модели. Создайте миграцию
rails g migration AddPrimaryKeyToColleges id:primary_key
. Затем запуститеrails db:migrate
. Если вы не хотите переносить, вам нужно использовать правильный синтаксис:self.primary_key = "college_id"
3. изменение основного идентификатора столбца не в моих силах. Это то, что было реализовано до моего прибытия, и на чем непреклонно настаивает большая часть команды, в которой я работаю. Фактически, учитывая задачу, которую я выполняю, я ничего не могу изменить в базе данных — я просто читаю из нее. Я отмечу это как решенное. Просто пытаюсь удержаться от открытия другого вопроса…