2

我开始使用 Rails 已经有几天了。我正在尝试制作一个表单应用程序,要求用户在每种情况下都必须登录。

所以我让用户登录 Railcast:http: //railscasts.com/episodes/250-authentication-from-scratch

现在,我需要在我的其他控制器中进行登录,因此用户在没有登录的情况下无法访问整个应用程序。我尝试了这种方法:

application_controller.rb

class ApplicationController < ActionController::Base

  protect_from_forgery with: :exception

  helper_method :current_user

  private

  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
  end

  def logged_in
    return true if current_user 
  end 

  def login_required 
    if logged_in false
      redirect_to log_in_path and return false 
     end                                                                                                                    
  end 

end 

类别控制器.rb

class CategoriesController < ApplicationController
  before_filter :login_required
  def new

  def index
     @categories = Categorie.all
  end

它返回我这个错误:

CategoriesController#index 中的 ArgumentError 参数数量错误(1 代表 0)

 Extracted source (around line #14):    
    def logged_in
        return true if current_user
    end 

我的 before_filter :login_required 需要别的东西吗?我真的不明白这个错误。

4

1 回答 1

3

您定义了一个名为logged_in不带参数的方法,但您使用 1 个参数调用它:

if logged_in(false)

你应该这样做:

if logged_in

您的代码应该如下所示:

def logged_in
  current_user 
end 

def login_required 
  return false if logged_in
  redirect_to log_in_path
end
于 2013-10-29T09:40:24.317 回答