Devise Token Auth:authenticate_user!工作错了

时间:2016-04-17 13:52:46

标签: ruby-on-rails devise

如果我将before_action :authenticate_user!添加到ApplicationController,则会收到错误消息:

ActionView::Template::Error (undefined method `name' for nil:NilClass):
    1: json.data @users, :name, :username

此文件的内容:

show.jbuilder

json.data @users, :name, :username

我的控制器:

users_controller.rb

class UsersController < ApplicationController

  before_action :authenticate_user!

  def index
    @users = User.all
  end

end

如果我删除before_action :authenticate_user!一切正常,我会获得用户列表的JSON对象。

为什么会这样?设备通常会返回401,但devise_token_auth正在尝试触发我的show并因为无法访问数据库而失败。如何解决这种奇怪的行为?

1 个答案:

答案 0 :(得分:1)

您的控制器非常特殊,您的错误是您正在将集合发送到为单个资源构建的视图。

在Rails中,show动作对应于查看单个资源,通常依赖于通过:id参数传递ID:

class UsersController < ApplicationController
  # GET /users
  def index
    @users = User.all
  end

  # GET /users/:id
  def show
    @user = User.find(params[:id])
  end
end

您也不需要显式调用渲染。

应用程序/视图/用户/ show.json.jbuilder:

json.(@user, :name, :username)

应用程序/视图/用户/ index.json.jbuilder:

json.comments @user do |json, user|
  json.(user, :name, :username)
end