redirect_to 处的参数数量错误(2 个代表 0..1)
wrong number of arguments (2 for 0..1) at redirect_to
错误图片
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 非常漂亮地回答了如何从控制器及其动作中创建路由。
错误图片
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 非常漂亮地回答了如何从控制器及其动作中创建路由。