У меня есть Rails API, который я использую с RABL для отправки JSON обратно клиенту. Мне нужно иметь действие show
и index
для модели Question
. В этом примере a Question has_many Answers.
Rails JSON API, как работать с нолем в RABL?
Как вы относитесь к объекту nil в RABL? API вызывает ошибку, потому что я вызываю .answers
на объект question
, который является nil
(переданный question_id
не существует).
Я мог бы обернуть ассоциации часть RABL с if
как ниже, так в question
, что не существует, не вызовет ошибку,
# questions/show.rabl
object @question
attributes :id, :text
node(:answer_id) do |question|
if question != nil # <-- This if keeps the .answers from blowing up
answer = question.answers.first
answer != nil ? answer.id : nil
end
end
Но тогда, когда я называю /api/questions/id_that_doesn't_exist
я получаю это вернулся: {answer_id:null}
вместо {}
.
Я попробовал оборачивать весь элемент узла в if
, как это,
if @question != nil # <-- the index action doesn't have a @question variable
node(:answer_id) do |question|
answer = question.answers.first
answer != nil ? answer.id : nil
end
end
Но тогда мое index
действие не будет возвращать node(:answer_id)
потому @question
не существует, когда вы совершаете звонок из коллекции.
Есть ли способ получить оба поведения?
# questions/index.rabl
collection @questions
extends "questions/show"
как о есть, если оператор в контроллере и явно показать пустой объект? – j03w
Это кажется немного взломанным, но это заставляет ошибку уйти. Если я верну '' {} ', если объект равен nil, я получаю' [] 'обратно от вызова. Это может быть лучшим решением, чем ошибка. – jmosesman