6

我有一个简单的 Angular Rails 应用程序,我正在尝试连接它。

这是我的导轨控制器:

class ItemsController < ApplicationController
  respond_to :json, :html

  def index
    @items = Item.order(params[:sort]).page(params[:page]).per(15)
  end

  def show
    @item = Item.where(params[:id])

    if @item.empty?
      flash[:alert] = "Item number #{params[:id]} does not exist"
    else
      respond_with @item do |format|
        format.json { render :layout => false }
      end
    end
  end
end

我不断收到ActionView::MissingTemplate错误,因为 rails 一直在尝试提供 erb 模板。我不要模板!!我只想要json。有人可以给出明确的respond_to/respond_with 语法,让我永远摆脱模板吗?

4

1 回答 1

8

rails有两种渲染方式,CMIIW

首先,默认情况下,它会渲染一个视图模板,例如

  def show
  end

然后它将呈现默认的显示视图模板,例如:app/views/controller_name/show.html.erb

二是手动渲染,使用render方法

如果您只想响应 json,则:

class ItemsController < ApplicationController
  def show
    id = params.require(:id)
    @item = Item.find_by(id: id)

    if @item.nil?
      render json: { message: "Item number #{id} does not exist", status: :not_found }
    else
      render json: @item
    end
  end
end

无需使用respond_to,并且它也已从最新的导轨中删除

rails guide aboutrender真的很有用,你可以在这里阅读

于 2014-12-28T02:28:52.557 回答