簡體   English   中英

Rails 3:a​​lias_attribute和Unkown列錯誤

[英]Rails 3: alias_attribute and Unkown column error

我正在使用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)。 我究竟做錯了什么?

Arel(進行SQL查詢的那個)仍然不知道ActiveRecord的別名(最多3.0.3)。 在這種情況下,您應確保使用原始名稱LoginId進行查詢。

如果您進入控制台並創建User.where(:username =>“root”),您會看到它生成錯誤,盡管User.username運行良好。

現在只需替換​​sinup表單上的用戶名出現,直到上游開始支持它。

編輯:順便說一句,建議的方法是做一個觀點 別忘了! http://www.slideshare.net/napcs/rails-and-legacy-databases-railsconf-2009

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM