mysql - 用户记录保存到一个数据库但不在另一个数据库中

标签 mysql ruby-on-rails devise

我正在使用 Rails 和 MySql 数据库以及 Devise 进行用户注册。我在两个数据库中有一个用户表,例如:db1 和 db2。注册用户后,我检查了 Rails 在后台,为两个数据库创建了用户。当我查看 db1 的用户表时,没有找到记录,但为 db2 插入了记录。

这是我的代码。感谢您的帮助。

user model
-----------
class User < ActiveRecord::Base
 devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
attr_accessible :username, :email, :password, :password_confirmation, :remember_me, :confirmation_token

after_create :save_to_db2
 def save_to_db2
   @user = User.last
   ActiveRecord::Base.establish_connection("db_second").connection
   sql = "INSERT INTO users (username, email) VALUES ('#{@user.username}', '#{@user.email}')"
   connection.execute(sql)  
 end
end

database.yml
-------------
development:
adapter: mysql2
encoding: utf8
database: db1
pool: 5
username: root
password: root

db_second:
adapter: mysql2
encoding: utf8
database: db2
pool: 5
username: root
password: root

最佳答案

您的方法存在一些问题:

最重要的一点:通过这种方式编写 SQL 语句,您很容易受到 SQL 注入(inject)攻击。参见 this site了解更多信息。请尽量避免构建自己的 SQL,并尽可能使用 ActiveRecord 的辅助方法。

其次,您正在与错误的连接通话。每个请求都有一个数据库连接。通过调用 ActiveRecord::Base.establish_connection("db_second"),您将该连接更改为与“db2”的连接。这意味着之后,所有操作都将使用该连接而不是与“db1”的连接。

这两个问题的可能解决方案是引入具有不同连接的第二个模型。

class BackupUser < ActiveRecord::Base

  def self.establish_connection
    super(:db_second)
  end

  establish_connection

end

然后在您的原始用户中:

class User < ActiveRecord::Base

  # ....

  after_create :make_backup

  def make_backup
    BackupUser.create!(username: username, email: email)
  end

end

但是,如果您使用它进行备份,可能有更好的工具。如果备份是您想要的,您可能需要查找“热备份”解决方案。

关于mysql - 用户记录保存到一个数据库但不在另一个数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24087300/

相关文章:

mysql - 从 MySQL 数据库表中删除一半的记录

ruby-on-rails - 使用设计加密其他表列

ruby-on-rails - Ruby on Rails : undefined method `current_user?`

ruby-on-rails - 完成 Michael Hartl 的教程后安装 Devise

ruby-on-rails - 设计重置密码 token 不能为空

php - mysql重用自动递增id

mysql - 哪个更快 - 从 n 列中获取具有大小 t 的单个值的列,或从 1 列中获取大小为 n*t 的列?

mysql - 显示处于相同阶段和状态的具有相同 Id 的记录

ruby-on-rails - 运行测试时出现莫名其妙的错误

ruby-on-rails - 为什么在 Ubuntu 上安装 Rails gem 会引发 Zlib::GzipFile::Error?