MySQL продолжает тянуть выбранный адрес электронной почты NULL для сессии в RoR - PullRequest
0 голосов
/ 20 сентября 2011

Я попытался использовать Devise, но так как у меня это не сработало, я решил создать аутентификацию и сеансы с нуля.Я понимаю, что проблема не была изобретена, но это - mysql.По какой-то причине, когда я регистрирую пользователя, информация и атрибуты сохраняются в базе данных.Когда я вхожу в систему, используя адрес электронной почты и пароль, он постоянно сообщает мне, что это неверный адрес электронной почты / пароль.Журнал выглядит следующим образом:

Processing by SessionsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"NFudGruZS79uwDrKzbHDQrBjlcwQ7AkC958vI4aHDAs=", "session"=>{"email"=>"first@abc.com", "password"=>"[FILTERED]"}, "commit"=>"Sign in"}
User Load (0.4ms)  SELECT `users`.* FROM `users` WHERE `users`.`email` IS NULL LIMIT 1

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

Кто-нибудь знает, почему он не извлекает введенную мною электронную почту и вместо нее получает NULL?

Должен ли я просто создать новую базу данных и вместо этого переключить файл database.yml на новую базу данных?

Заранее спасибо.

РЕДАКТИРОВАТЬ - НЕКОТОРЫЙ БОЛЬШЕ КОДА

модель пользователя:

class User < ActiveRecord::Base

 attr_accessor   :password
 attr_accessible :name, :email, :secondary_email, :password, :password_confirmation, :gender

has_many :user_owner_relationships
has_many :owners, :through => :user_owner_relationships
has_many :cash_endowments
has_many :checks, :through => :cash_endowments
has_many :owners, :through => :cash_endowments

email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i


validates :email,                 :presence => true,
                                  :uniqueness => { :case_sensitive => false },
                                  :format => { :with => email_regex }

validates :name,                  :presence => true,
                                  :length => { :maximum => 40 }

validates :password,              :presence => true,
                                  :confirmation => true,
                                  :length => { :within => 6..20 }

session_controller (пользовательский контроллер является стандартным)

def new
 @title = "Sign in"
end

def create
  user = User.authenticate(params[:email], params[:password])
 if user
  session[:user_id] = user.id
  redirect_to root_path, :notice => "Welcome '#{user.first_name}"
 else
  flash.now.alert = "Invalid email or password."
  render "new"
 end
end

1 Ответ

0 голосов
/ 20 сентября 2011

Ошибка новичка -

Это на самом деле потому, что мой new.html.erb для контроллера сессий не извлекал символ: session из этого кода:

<%= form_for (:session, :url => sessions_path) do |f| %>

Так что я просто использовал вместо него form_tag.

...