Ruby on rails Rails应用程序提供了;“无方法错误”;当它看到<;%如果当前用户为\u user.admin?%&燃气轮机;

Ruby on rails Rails应用程序提供了;“无方法错误”;当它看到<;%如果当前用户为\u user.admin?%&燃气轮机;,ruby-on-rails,ruby,Ruby On Rails,Ruby,我在“用户”视图中使用了此代码,没有遇到任何问题:。但是在与不同控制器关联的一组视图中使用它会抛出“无方法错误” 背景:该应用程序允许管理员创建清道夫搜索。管理员应该能够删除搜索。我以为我知道如何配置一切,但显然,我遗漏了一些东西。这是我的密码: controller.rb class HuntsController < ApplicationController def index @title = "All Hunts" @hunts = Hunt.order

我在“用户”视图中使用了此代码,没有遇到任何问题:。但是在与不同控制器关联的一组视图中使用它会抛出“无方法错误”

背景:该应用程序允许管理员创建清道夫搜索。管理员应该能够删除搜索。我以为我知道如何配置一切,但显然,我遗漏了一些东西。这是我的密码:

controller.rb

class HuntsController < ApplicationController

  def index
     @title = "All Hunts"
     @hunts = Hunt.order("name ASC") 
  end

  def show
    @hunt = Hunt.find(params[:id])
    @title = @hunt.name    
  end

  def new
    @hunt = Hunt.new
    @title = "New Hunt"  
  end

  def create
    @hunt = Hunt.new(params[:hunt])
    if @hunt.save
      flash[:success] = "Hunt created!"
      redirect_to hunts
    else
      @title = "New Hunt"
      render 'new'     
    end
  end

  def edit
    @hunt = Hunt.find(params[:id])
    @title = "Edit hunt"
  end

  def delete
    Hunt.find(params[:id]).destroy
    flash[:success] = "Hunt destroyed."
    redirect_to index  
  end

end

当前用户
nil
,因此不知道如何响应
管理员?
。请确保
current_user
始终是一个用户实例,或者检查它不是
nil

在Ruby 2.3+中,可以使用“安全导航”操作符(
&.
):

在Ruby 2.2及更早版本中,改用布尔短路:

if current_user && current_user.admin?
请注意,ActiveSupport有
try
,但有不同的行为,可能会隐藏bug。对于类似的行为,请使用


在Ruby中,获取“未定义的方法(undefined method)\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu for nil:NilClass”是一个非常常见的现象,所以要习惯它经常发生
:)

当前用户
nil
,因此不知道如何响应
管理员?
。请确保
current_user
始终是一个用户实例,或者检查它不是
nil

在Ruby 2.3+中,可以使用“安全导航”操作符(
&.
):

在Ruby 2.2及更早版本中,改用布尔短路:

if current_user && current_user.admin?
请注意,ActiveSupport有
try
,但有不同的行为,可能会隐藏bug。对于类似的行为,请使用


在Ruby中,获取“未定义的方法\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuunil:NilClass”是一个非常常见的现象,因此要习惯它经常发生
:)

您必须登录用户才能实例化
当前用户。如果您正在使用Desive,请使用:

class HuntsController < ApplicationController
  before_filter :authenticate_user!

  def index
    ...
  end

  .......

end
class HuntsController

在你的控制器里。并确保在您的用户模型中定义了
.admin?
方法。

您必须登录用户才能实例化
当前用户。如果您正在使用Desive,请使用:

class HuntsController < ApplicationController
  before_filter :authenticate_user!

  def index
    ...
  end

  .......

end
class HuntsController

在你的控制器里。并确保在您的用户模型中定义了
.admin?
方法。

确切和完整的错误是什么?我刚刚在问题的主要部分添加了错误信息。这是一个零级错误。
当前用户
未在此控制器中定义。确切和完整的错误是什么?我刚刚将错误信息添加到问题的主要部分。这是一个零类错误。
此控制器中未定义当前用户。
。很漂亮!谢谢你的解释。添加“current_user&&”位解决了我的问题。您也可以使用
对象#try
--
current_user。try(:admin?
),如果
current_user
nil
漂亮,它将自动失败!谢谢你的解释。添加“current_user&&”位解决了我的问题。您也可以使用
Object\try
--
current_用户。try(:admin?
如果
current_用户
nil
if current_user && current_user.admin?
class HuntsController < ApplicationController
  before_filter :authenticate_user!

  def index
    ...
  end

  .......

end