Rails控制器无法使用return语句识别渲染

时间:2015-04-14 00:34:09

标签: ruby-on-rails ruby-on-rails-4

我使用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语句之前渲染的内容。我真的不明白发生了什么事?

1 个答案:

答案 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

它会自动响应请求的格式(如果已定义)。