2015-10-22 3 views
0
#app/controllers/sessions_controller.rb 
class SessionController < ApplicationController 
    def new 
    @session = Session.new 
    end 

    def fetch 
    #@user = User.session(params [:user]) 
    redirect_to "http://www.google.com" 
    end 

    def create 
    emai = params[:email] 
    puts emai 
    user = User.find_by(:email => session[:emai]) 

    #user = User.find_by (params [:email]) 
    #user = User.find_by email: '[email protected]' 
    #user = User.find_by(params[:Email]) 

    #if (session[:Email] = user.email) 
    if (user) 
    redirect_to "http://www.yahoo.com" 
     flash[:notice] = "You signed up successfully" 
     flash[:color]= "valid" 

    else 
     flash[:notice] = "Form is invalid" 
     flash[:color]= "invalid" 
     redirect_to "http://www.google.com" 
    end 
    #redirect_to "http://www.yahoo.com" 
    end 
end 

Каждый раз, когда я выполняю свой просмотр, я получаю перенаправление на google.com, хотя я передаю параметры.Как передать параметры из вида в контроллер в Ruby


Редактируйте R Пек:

Моя логика должна посылать людей на Yahoo, если PARAMS установлены, но по-прежнему посылает в Google, как я могу это исправить?

+1

Ваши методы перенаправляет на Google, что, почему метод каждый раз, когда срабатывает, то вы будете перенаправлены на Google. –

+0

, хотя я прохожу параметры в виду, что не отображается в контроллере, он показывает, что сообщение электронной почты является нулевым, что я должен сделать для этого. –

+0

попробуйте 'user = User.find_by (email: params [: email])' – Minato

ответ

1

Try:

user = User.find_by(:email => params[:sessions][:emai]) 

Вы не получаете значение электронной почты, если вы только звоните params[:email] вы должны вызвать родителя первым перед вызовом ребенка params[:sessions][:email].

0

С кодом что-то не так.

Вот что я бы написать:

#app/controllers/sessions_controller.rb 
class SessionsController < ApplicationController 
    def new 
     @session = Session.new 
    end 

    def create 
     email = params[:sessions][:email] 
     user = User.find_by email: email 

     url = user ? "google" : "yahoo" 
     colour = user ? "valid" : "invalid" 
     notice = user ? "You signed up successfully" : "Your form is invalid" 

    redirect_to "http://#{url}.com", notice: notice, color: colour 
    end 

    private 

    def session_params 
     params.require(:session).permit(:session, :params) 
    end 
end 

OOP

Я думаю, что это может быть немного продвинутый, но я буду писать это в любом случае, для моей собственной выгоды.

Rails - object orientated (он построен на Ruby, который является языком ООП). Это означает, что каждый раз, когда вы создаете/вызываете контроллер, он должен быть сосредоточен вокруг объектов.

Хорошим примером для вас будет Devise controllers.

У этого есть sessions_controller, который по существу позволяет вам CRUD (Create Read Update Destroy) a сеанс. Это правильный способ использования контроллера.

Ваш реализация, как представляется, имеет дело с пользователя, а не сессии, и как таковой вы бы лучше с помощью users_controller, чтобы исправить это:

#app/controllers/users_controller.rb 
class UsersController < ApplicationController 
    def new 
     @user = User.new 
    end 

    def create 
     @user = User.new 
     @user.save 
    end 
end 

Сказав, что это похоже, что вы, вероятно, собираетесь решить проблему, чтобы сделать это так, чтобы вы могли использовать User для создания нового сеанса.

Я предполагаю, что это лучше, чтобы помнить, что вы должны убедиться, что вы в состоянии оценить хорошую структуру для вашего приложения

+1

Благодарю вас. его решить проблему. –

Смежные вопросы