Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails application.rb中定义的当前用户将无法在创建操作中工作_Ruby On Rails_Ruby On Rails 4.1 - Fatal编程技术网

Ruby on rails application.rb中定义的当前用户将无法在创建操作中工作

Ruby on rails application.rb中定义的当前用户将无法在创建操作中工作,ruby-on-rails,ruby-on-rails-4.1,Ruby On Rails,Ruby On Rails 4.1,这是来自我的应用程序_controller.rb private def current_user return unless session[:user_id] @current_user ||= User.find_by_id(session[:user_id]) end helper_method :current_user def create @user = User.find(params[:user_id]) @user.co

这是来自我的应用程序_controller.rb

 private

  def current_user
    return unless session[:user_id]
    @current_user ||= User.find_by_id(session[:user_id])
  end

  helper_method :current_user
def create

    @user = User.find(params[:user_id]) 
    @user.comments.create(:user_id => @user.id, :commenter => current_user.login, :body => params[:comment][:body])
    respond_to do |format| 
         format.js 
         format.html { redirect_to(@user, :notice => 'Comment was successfully created.') } 
     end
  end
这是一个从我的comments_controller.rb创建的方法

 private

  def current_user
    return unless session[:user_id]
    @current_user ||= User.find_by_id(session[:user_id])
  end

  helper_method :current_user
def create

    @user = User.find(params[:user_id]) 
    @user.comments.create(:user_id => @user.id, :commenter => current_user.login, :body => params[:comment][:body])
    respond_to do |format| 
         format.js 
         format.html { redirect_to(@user, :notice => 'Comment was successfully created.') } 
     end
  end
打电话时说:

nil:NilClass的未定义方法“login”


什么可以阻止当前用户被找到?

当前用户
被正确找到。否则,将出现
命名错误

在您的情况下,
当前用户
只是返回
nil
。然后您尝试在
nil
上使用
.login
,这会导致您看到的错误:

undefined method `login' for nil:NilClass
因此,请尝试找出为什么当前用户在创建操作中返回
nil
。可能是因为
会话[:user\u id]
未设置或找不到用户


根据评论,问题在于CSRF保护。由于CSRF错误,会话未在
create
中初始化,因此
current_user
为空

CSRF保护通常在应用程序控制器中启用:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
end
class ApplicationController

您应该了解为什么CSRF保护会起作用并修复它。禁用它会使您的站点不安全。看看。

将其移到private之上后重试,private方法只能在同一个类中调用。移到private之上则不行help@RahulSingh私有方法也可以在子类内部调用。这是Ruby在其他语言中的一个区别。如何不设置会话[:user_id]?正是登录用户在发表评论。请尝试在
创建
中以
放置当前用户开头输出评论。检查
以查看它是否真的
,与
会话[:user\u id]
相同。如果它不是
nil
,您确定错误来自
create
操作中的行而不是其他行吗?p当前用户放置在create中时不会产生输出。我无法验证CSRF令牌的真实性可能与此有关吗?是的,看起来您的会话在
POST
上没有正确初始化,因此
session[:user\u id]
为空-->没有用户'是的,看起来您的会话在POST上没有正确初始化'有什么办法修复它吗?但我可以从网站上发送电子邮件?