我使用respond_to do |format|
类型的显式结构来呈现我的回复。有效的是:
respond_to do |format|
if something
format.json { render json: something, status: :ok }
else
format.json { render json: something_else, status: :ok }
end
end
但是,当我尝试这样做时(没有特别的原因,只是为了学习)。
respond_to do |format|
if something
format.json { render json: something, status: :ok }
return
end
format.json { render json: something_else, status: :ok }
end
它给了我"缺少模板"错误。我尝试了各种变体,由于某种原因,它只是忽略了我在return语句之前渲染的内容。我真的不明白发生了什么事?
答案 0 :(得分:0)
这是因为代码的结构。你需要做这样的事情:
respond_to do |format|
if something
format.json { render json: something, status: :ok and return }
end
format.json { render json: something_else, status: :ok }
end
处理json
格式的代码包含在方括号{}中,因此将return
放在后面是没有意义的。为了说明,你可以有这样的结构:
respond_to do |format|
if something
format.json { render json: something, status: :ok and return}
format.html { render "new" and return }
end
format.json { render json: something_else, status: :ok }
format.html { render "edit" }
end
它会自动响应请求的格式(如果已定义)。