redirect_to 处的参数数量错误(2 个代表 0..1)

wrong number of arguments (2 for 0..1) at redirect_to

错误图片

argument error

home_controller.rb

class HomeController < ApplicationController

def home
 @activities = Activity.order("created_at DESC").page(params[:page]).per_page(5)
end

def login
  render 
end

def logout
  session[:school_id] = nil
  session[:parent_id] = nil
  session[:user_id] = nil

  redirect_to :controller => 'home', :action => 'login'
end

宝石文件

source 'https://rubygems.org'
gem 'rails', '4.2.4'
gem 'mysql2', '~> 0.3.20'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'remotipart', '~> 1.2'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'bootstrap-sass', '~> 3.3.5'
gem 'sass-rails', '~> 5.0'
gem 'bootstrap_form'
gem 'devise', '~> 3.5', '>= 3.5.2'
gem 'bartt-ssl_requirement', '~>1.4.0', :require => 'ssl_requirement'
gem 'will_paginate'
gem 'paperclip'
gem 'bcrypt', '~> 3.1.7'
group :development, :test do
 console
  gem 'byebug'
end
redirect_to :controller => 'home', :action => 'login'

这是不对的,更别说丑了。相反,在 routes.rb 中创建一个执行该操作的路由。例如:

get 'login' => 'home#login'

那么你会使用:

redirect_to login_path

奖金

****您应该阅读 rails 路线以制定更好的路线。****

此外,处理登录的家庭控制器似乎不太干净。

更好的路线如下所示,但它需要不同的控制器设置:

resources :sessions

它创建了以下路线和许多其他路线(不完全是,但让我们忽略细节):

get 'login' => 'sessions#new'

再次,我建议您继续阅读 Rails routing

在我看来,您可能最初编写的代码不正确,即使您修复了源代码,Rails 仍在使用旧的(不正确的)版本。

您一定有以下变体:

redirect_to 'home', :action => 'login'
redirect_to 'home', 'login'

之前。

保留代码原样 (redirect_to(:controller => 'home', :action => 'login')),并确保正确重新启动 Rails 进程。

只是为了解释 redirect_to 实际上需要一条路径而不是控制器或动作,Helsing 非常漂亮地回答了如何从控制器及其动作中创建路由。