неопределенный метод `[]’ для nil:NilClass после входа в систему

#ruby-on-rails #ruby #ruby-on-rails-4

#ruby-on-rails #ruby #ruby-on-rails-4

Вопрос:

Я получаю эту ошибку после нажатия кнопки login, моя полная трассировка

 undefined method `[]' for nil:NilClass

Extracted source (around line #20):


 def create
  @session = Session.new(params[:session], request.remote_ip)
   if @session.valid?
    set_current_user(@session.current_user)
    add_to_current_cart params



Application Trace | Framework Trace | Full Trace
app/models/session.rb:12:in `initialize'
app/controllers/sessions_controller.rb:20:in `new'
app/controllers/sessions_controller.rb:20:in `create'
Request

Parameters:

{"utf8"=>"✓",
  "authenticity_token"=>==",
"email"=>{"{:placeholder=>"email@address.com",
:tabIndex=>"1",
"class"=>""}"=>""},
"password"=>"[FILTERED]",
"commit"=>"Log In"}
  

Мой файл контроллера сеансов

  def create
  @session = Session.new(params[:session], request.remote_ip)
   if @session.valid?
  set_current_user(@session.current_user)
  add_to_current_cart params
  add_to_favorites params

  if session[:return_to]
    redirect_to session[:return_to]
  else
  

Файл Session.rb является

   class Session
 INCORRECT_PASSWORD = "The password you entered is incorrect.       Please try again (make sure your caps lock is off)."
 EMAIL_NOT_FOUND = "The email id you entered does not belong to any   account."
 MANDATORY_FIELDS = "You must fill in all of the fields"

include ActiveModel::Validations
attr_accessor :email, :password, :errors
attr_reader :current_user

 def initialize(params={}, ip_address=nil)
   @errors = ActiveModel::Errors.new(self)
   @email = params[:email]
   @password = params[:password]
   @current_user = User.find_by_email(@email)
   @ip_address = ip_address
end

 def valid?
mandatory_fields_presence
if @current_user amp;amp; @errors.empty?
  if @current_user.waiting_for_confirmation?
    email_confirmation_link = "/account/#{@current_user.uuid}/send-confirmation-email"
    @errors.add(:base, "Please confirm your account first. <a href='#{email_confirmation_link}'>Resend confirmation link</a>")
  end
end
authenticate if @errors.empty?
@current_user.signed_in(@ip_address) if @errors.empty?
@errors.empty?

end

 private
  def mandatory_fields_presence
  @errors.add(:email, MANDATORY_FIELDS) if @email.blank? or        @password.blank?
  end

 def authenticate
   @errors.add(:email, EMAIL_NOT_FOUND) if @current_user.nil?
   if @errors.empty? amp;amp; !@current_user.authenticated?(@password)
    @errors.add(:password, INCORRECT_PASSWORD)
 end
end

end
      if session[:login_page] == true
        redirect_to root_path
     else
        redirect_to :back
     end
    end
  else
    if session[:login_page] == true
      render :new
    else
      flash[:login_failed] = OpenStruct.new({ :errors =>  @session.errors, :login_failed => true })
      redirect_to :back
    end
  end
 end
  

Работаю на ruby 1.9.3, rails 4.2.5
Я не могу войти в систему после нажатия кнопки входа в систему, даже форма регистрации также сталкивается с подобной проблемой. Помогите мне исправить эту проблему?

Комментарии:

1. отправляемые вами параметры не содержат session hash

2. вы отправляете параметры неправильно, проверьте мои ответы о том, как вы можете отправить параметры. пожалуйста, вставьте форму

Ответ №1:

Отправляемые вами параметры неверны, вы принимаете значение params в виде строки, что неверно,

Попробуйте отправить параметры в виде ключа и значения,

Отправить параметры как:

 {

    "utf8"=>"✓",
  "authenticity_token"=>"b7t1yJ7cGyxDmecBpvBrGLRbh/ubtPjsUFdP/HosK8kp/ZLRtrV3dVWE2vPjDnThCbt9hk1ftm5ZMg9Ia1StWw==",
    "email"=>{"pavanez4u@gmail.com",
    "tabIndex"=>"1",
    "password"=>"[FILTERED]"
    "commit"=>"Log In"
}
  

@email = params[:email] эта строка выдает ошибку, потому что формат параметров неверен.

Комментарии:

1. Как включить параметры

2. Пожалуйста, вставьте форму, выбранная вами форма неверна

3. @Паван Кумар, что произошло?

4. почему вы не приняли мой ответ? это неправильно или что?