0

我最近更新了一个普通的控制器

render :json => @something

respond_to do |format|
          format.html {
            redirect_to @something
          }
          format.json {
            puts "found json format"
            format.json { render json: @something, status: :created }
          }
        end

但是,现在我收到 ActionView::MissingTemplate 错误。我的问题是,如果我使用 respond_to 来做 |format| 块,我需要使用模板吗?如果我只想返回纯 json 怎么办?

顺便说一句,json respond_to 块中的 puts 语句被成功调用。

4

4 回答 4

1

从 json 渲染块中删除format.json部分(您的块中有一个不必要的块):

  respond_to do |format|
      format.html {
        redirect_to @something
      }
      format.json {
        render json: @something, status: :created
      }
    end
于 2013-06-13T20:09:32.797 回答
1

我认为您的代码提示错误的原因是因为您有

format.json {
            format.json { render json:  @something , status: :created }
          }

你应该有:

format.json {
           render json:  @something , status: :created
          }
于 2013-06-13T20:09:43.500 回答
1

我认为问题是puts在你的 format.json 块内被调用,而 format.json 嵌套在它自己的块内。尝试删除两者(如下所示)。

respond_to do |format|
          format.html {
            redirect_to @something
          }
          format.json {
            puts "found json format"
            format.json { render json: @something, status: :created }
          }
        end

尝试:

  respond_to do |format|
    format.html { redirect_to @something }
    format.json  { render json: @something, status: :created }
  end
于 2013-06-13T20:06:10.847 回答
1

您告诉您接受 HTML 和 JSON 格式。由于您的请求来自 HTML,因此您将呈现 HTML 模板。如果您只想返回 JSON,请从您的代码中删除该行。还要检查respond_to. _

可能你已经知道了,但是有一个关于Layouts and Rendering的指南。

于 2013-06-13T20:06:30.380 回答