【问题标题】:Rails - wrong number of arguments (1 for 0)Rails - 参数数量错误(1 代表 0)
【发布时间】:2013-10-29 09:37:38
【问题描述】:

我开始使用 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 

categories_controller.rb

class CategoriesController < ApplicationController
  before_filter :login_required
  def new

  def index
     @categories = Categorie.all
  end

它返回给我这个错误:

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

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

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

【问题讨论】:

  • 你能显示 CategoriesController, index 方法吗?
  • 我在编辑我的帖子时添加了它:)

标签: ruby-on-rails before-filter


【解决方案1】:

您定义了一个名为 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

【讨论】:

  • 哦,太好了!现在好像可以用了,谢谢!我把它变成了“if !logged_in”,它把我重定向到了 log_in 表单。所以,如果我理解的话,这个“before_filter”是一个 Rails 原生函数,而“:login_required”调用了我的 application_controller.rb def login_required 函数?
  • 如果你愿意,可以使用unless
  • 当您执行before_filter :foo 时,rails 将在当前控制器(或其父级)中调用方法foo 是的。
  • 好的,因为 application_controller 是我的 categories_controller 的父级,它首先查看 categories_controller,什么也没找到并在 application_controller 中搜索!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多