Rails 3: ошибка столбца alias_attribute и Unkown - PullRequest
3 голосов
/ 13 декабря 2010

Я использую Devise для аутентификации, поэтому я добавил в свою прежнюю базу данных несколько столбцов, чтобы разместить их следующим образом:

class User < ActiveRecord::Base

  set_table_name 'my_legacy_user_table'
  set_primary_key 'UserId'
  alias_attribute :id, :UserId
  alias_attribute :username, :LoginId
  alias_attribute :encrypted_password, :PasswordSHA1Hash
  alias_attribute :first_name, :Name
  alias_attribute :last_name, :Surname

  devise :database_authenticatable, :authentication_keys => [:username]

  attr_accessible :username, :password, :password_confirmation

  def password_salt=(password_salt)
  end

  def password_salt
  end

  def password_digest(password)
    self.class.encryptor_class.digest(password)
  end

end

Когда я отправляю сообщение в форму / users / sign_in, яследующее исключение:

Mysql2::Error: Unknown column 'my_legacy_user_table.username' in 'where clause': SELECT `kms_User`.* FROM `my_legacy_user_table` WHERE (`my_legacy_user_table`.`username` = 'mrichman') LIMIT 1

Полагаю, я предполагал, что alias_attribute даст ActiveRecord команду использовать реальное имя столбца (UserId), а не псевдоним (username).Что я делаю не так?

1 Ответ

6 голосов
/ 13 декабря 2010

Arel (тот, который делает запросы SQL) все еще не знает псевдонимов ActiveRecord (до 3.0.3). Вы должны убедиться, что запрос сделан с использованием исходного имени, в этом случае LoginId.

Если вы войдете в консоль и создадите файл User.where (: username => "root"), вы увидите, что он генерирует ошибку, хотя User.username работает хорошо.

А пока просто заменяйте вхождения имени пользователя в форме sinup до тех пор, пока апстрим не начнет его поддерживать.

РЕДАКТИРОВАТЬ: Кстати, рекомендуемый способ сделать это сделать view ! Не забывай это! http://www.slideshare.net/napcs/rails-and-legacy-databases-railsconf-2009

...