私はこれを見つけました: http://www.slideshare.net/napcs/rails-and-legacy-databases-railsconf-2009そして彼のアドバイスに従って、SQLビューを作成してレガシーテーブルをまとめました。
これは私が自分で実行していたものです(Limesurveyの上にアプリケーションを追加しています):
CREATE VIEW `users` AS
SELECT `uid` as `id`,
`users_name` as `username`,
`email` as `email`,
`password` as `encrypted_password`,
`full_name` as `full_name`,
`role_names` as `role_names`,
`parent_id` as `parent_id`,
`lang` as `lang`,
`one_time_pw` as `one_time_pw`,
`created` as `created_at`,
`modified` as `updated_at`
FROM `lime_users`;"
問題は、ビューに挿入するために、ベース テーブルにデフォルト値がないすべての列を SQL ビューに含める必要があることです。これは、「醜い」列名をレールに適した列名に正規化する良い方法です。
私のユーザーモデル:
class User < ActiveRecord::Base
before_save :save_encrypted_password
self.primary_key = "id" # This needs to be declared, for some reason.
def sha2(password)
(Digest::SHA2.new << password).to_s
end
def valid_password?(password)
return false if encrypted_password.blank?
return Devise.secure_compare(sha2(password), self.encrypted_password)
end
protected
def save_encrypted_password
if password == password_confirmation
self.encrypted_password = sha2(password)
else
errors.add :password_confirmation, "has to match password"
end
end
end
データベースにあるモデルの制約 (null や一意の値などではない) を反映して、これ以上の問題を回避することもお勧めします。(難解なエラー メッセージを 1 時間近く調べた後、これを苦労して学びました。)
お役に立てれば。