我正试图慢慢地将一个旧的CakePHP站点迁移到Rails 4,因为需要大量的工作,所以需要逐步迁移该站点,一次只迁移一个部分,从Active Admin开始。我见过很多关于这样做的问题,但我需要考虑一些棘手的额外问题:
一旦整个站点被迁移到Rails,我当然可以开始跟踪关于如何迁移要设计的应用程序的无数答案,但是现在我需要使用现有的应用程序。
谢谢
发布于 2014-01-31 22:11:55
我能够通过安装可忽略的gem来解决这个问题,并在默认范围内将密码列SELECTing为encrypted_password。它很丑,但很管用
class User < ActiveRecord::Base
ignore_columns :password
default_scope :select => "#{User.quoted_table_name}.*, #{User.quoted_table_name}.password AS encrypted_password"
devise :database_authenticatable
def valid_password?(password)
hash = ::Digest::MD5.hexdigest("[SALT REDACTED]#{password}").downcase
return hash == self.encrypted_password
end
end发布于 2014-03-11 07:27:52
我发现了以下内容: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视图中包括基表中没有默认值的所有列,以便插入视图。这是一种将“丑陋”列名规范化为rails友好列名的好方法。
我的用户模型:
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在数据库中的模型约束(非空值、唯一值等)中反映也是一个好主意,以避免出现更多的问题。(在经过近一小时的神秘错误信息后,我们终于学会了这一点。)
希望这能有所帮助。
https://stackoverflow.com/questions/21489265
复制相似问题