Erreur d'image

erreur d'argument

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

Gemfile

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
1
Karthik Polina 27 déc. 2015 à 23:17

3 réponses

Meilleure réponse

Juste pour expliquer que redirect_to attend en fait un chemin pas un contrôleur ou une action et Helsing a très bien répondu que comment pouvez-vous créer une route hors du contrôleur et de son action.

0
Muhammad Junaid 27 déc. 2015 à 22:08
redirect_to :controller => 'home', :action => 'login'

Ce n'est pas correct, pour ne pas dire laid. Au lieu de cela, créez une route dans routes.rb qui effectue cette action. Par exemple:

get 'login' => 'home#login'

Ensuite, vous utiliseriez:

redirect_to login_path

BONUS

**** Vous devriez vous renseigner sur le routage des rails pour faire de meilleurs itinéraires aussi. ****

De plus, un contrôleur domestique qui gère les connexions ne semble pas très propre.

Un meilleur itinéraire serait quelque chose comme ce qui suit, mais il nécessite une configuration de contrôleur différente:

resources :sessions

Qui crée la route suivante et bien d'autres (pas exactement mais ignorons les détails):

get 'login' => 'sessions#new'

Encore une fois, je vous recommande de lire sur Routage des rails.

2
Rod Argumedo 27 déc. 2015 à 22:02

Il me semble que votre code a peut-être été mal écrit au départ, et même si vous avez corrigé le code source, Rails utilise toujours l'ancienne version (incorrecte).

Vous devez avoir eu une variante de:

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

Avant.

Laissez votre code tel que vous l'avez (redirect_to(:controller => 'home', :action => 'login')) et assurez-vous de redémarrer correctement votre processus Rails.

0
Martin Konecny 27 déc. 2015 à 20:47