我有一个Rails API,我正在使用RABL将JSON发送回客户端。我需要对show
模型执行index
和Question
操作。在此示例中,为Question has_many Answers.
你如何处理RABL中的nil对象? API抛出错误,因为我在.answers
question
对象上调用nil
(传入的question_id
不存在)。
我可以用下面的if
包装RABL的关联部分,这样不存在的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"
答案 0 :(得分:3)
我实际上在RABL文档中找到了解决另一个问题的答案。
您可以添加:unless
块,以防止它试图访问nil对象上的属性:
# questions/show.rabl
object @question
attributes :id, :text
node(:answer_id, unless: lambda { |question| question.nil? }) do |question|
answer = question.answers.first
answer != nil ? answer.id : nil
end