Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 Rails语法教程&;方法错误_Ruby On Rails_Ruby On Rails 4_Railstutorial.org - Fatal编程技术网

Ruby on rails Rails语法教程&;方法错误

Ruby on rails Rails语法教程&;方法错误,ruby-on-rails,ruby-on-rails-4,railstutorial.org,Ruby On Rails,Ruby On Rails 4,Railstutorial.org,可能需要一些帮助来解决rails教程之后我遇到的问题…当我尝试以“访问者”(未登录用户)身份访问用户索引时,收到的第一个错误如下: 我的原始代码: _USER.HTML.ERB(用户部分) 用户模型 class User < ActiveRecord::Base before_save { self.email = email.downcase } before_create :create_remember_token validates :name, presence:

可能需要一些帮助来解决rails教程之后我遇到的问题…当我尝试以“访问者”(未登录用户)身份访问用户索引时,收到的第一个错误如下:

我的原始代码:

_USER.HTML.ERB(用户部分)

用户模型

class User < ActiveRecord::Base
  before_save { self.email = email.downcase }
  before_create :create_remember_token

  validates :name, presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }

  has_secure_password
  validates :password, length: { minimum: 6 }

  def User.new_remember_token
    SecureRandom.urlsafe_base64
  end

  def User.hash(token)
    Digest::SHA1.hexdigest(token.to_s)
  end

  private

    def create_remember_token
      self.remember_token = User.hash(User.new_remember_token)
    end
end
class用户
现在…我从stackOverflow上的其他帖子中了解到,发生这种情况是因为管理员用户对于访问者设置为nil。然而,当我遵循一些人的建议时,它产生了一个新问题……我改变了:

<% if current_user.admin? && !current_user?(user) %>

从_user.html.erb部分到:

<% if current_user.try(:admin?) && !current_user?(user) %>

根据建议,现在我的错误如下:

/Users/user/Documents/production_app/app/views/users/_user.html.erb:9: syntax error, unexpected keyword_ensure, expecting keyword_end /Users/user/Documents/production_app/app/views/users/_user.html.erb:11: syntax error, unexpected end-of-input, expecting keyword_end

Extracted source (around line #7):

<ul class="users">
7  <%= render @users %>
</ul>

<%= will_paginate %>
/Users/user/Documents/production\u app/app/views/Users/\u user.html.erb:9:语法错误,意外关键字\u确保,预期关键字\u end/Users/user/Documents/production\u app/app/views/Users/\u user.html。erb:11:语法错误,意外输入结束,预期关键字\u end
提取的源(第7行附近):
    7.
我肯定我错过了一些小的/愚蠢的事情…任何关于我做错了什么的方向都将非常感激


谢谢,

因为用户部分似乎要在用户已经登录的页面中呈现。您的
当前用户
nil
。在Ruby中,您不能对nil对象调用方法。
因此,用户似乎没有登录。

仅查看原始代码,您似乎只想在有管理员用户登录时提供删除链接

您将获得nil:NilClass的
未定义方法“admin?”错误,因为
当前用户
为nil;即没有用户登录

如果没有为访问者提供正确的删除链接,您可以通过以下方法轻松解决此问题:


i、 e.在检查当前用户是否是管理员之前,只需检查是否有
当前用户

谢谢,但是我修复了nil错误(通过其他stackoverflow帖子的一些尝试和错误)…然后它给了我我在帖子底部提到的后续错误。虽然它已经被修复了…thx!是的,就是这样-谢谢,伙计…&我也是个白痴,因为我有一些旧代码,我认为我已经完全注释掉了(我没有在帖子中包括它)…但显然它仍在被读取…它导致了我提到的后续错误…新手错误。当我删除旧代码时,你的建议很有效。
class SessionsController < ApplicationController
  def new
  end

  def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      # Sign in the user & redirect to users show page
      sign_in user
      redirect_back_or user
    else
      flash.now[:danger] = 'Invalid email/password combination'
      render 'new'
    end
  end

  def destroy
    sign_out
    redirect_to root_url
  end
end
module SessionsHelper
  def sign_in(user)
    remember_token = User.new_remember_token
    cookies.permanent[:remember_token] = remember_token
    user.update_attribute(:remember_token, User.hash(remember_token))
    self.current_user = user
  end

  def signed_in?
    !current_user.nil?
  end

  def current_user=(user)
    @current_user = user
  end

  def current_user
    remember_token = User.hash(cookies[:remember_token])
    @current_user ||= User.find_by(remember_token: remember_token)
  end

  def current_user?(user)
    user == current_user
  end

  def sign_out
    current_user.update_attribute(:remember_token,
                                  User.hash(User.new_remember_token))
    cookies.delete(:remember_token)
    self.current_user = nil
  end

  def redirect_back_or(default)
    redirect_to(session[:return_to] || default)
    session.delete(:return_to)
  end

  def store_location
    session[:return_to] = request.url if request.get?
  end
end
class User < ActiveRecord::Base
  before_save { self.email = email.downcase }
  before_create :create_remember_token

  validates :name, presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }

  has_secure_password
  validates :password, length: { minimum: 6 }

  def User.new_remember_token
    SecureRandom.urlsafe_base64
  end

  def User.hash(token)
    Digest::SHA1.hexdigest(token.to_s)
  end

  private

    def create_remember_token
      self.remember_token = User.hash(User.new_remember_token)
    end
end
<% if current_user.admin? && !current_user?(user) %>
<% if current_user.try(:admin?) && !current_user?(user) %>
/Users/user/Documents/production_app/app/views/users/_user.html.erb:9: syntax error, unexpected keyword_ensure, expecting keyword_end /Users/user/Documents/production_app/app/views/users/_user.html.erb:11: syntax error, unexpected end-of-input, expecting keyword_end

Extracted source (around line #7):

<ul class="users">
7  <%= render @users %>
</ul>

<%= will_paginate %>