Rails 中的外部数据库关联。更新数据

External database association in Rails . Update data

我有以下问题:

我有两个模型,连接到外部数据库 (Mysql) 外部数据库中的两个表的正确名称是: f_aziendef_partecipanti(意大利语)。 在我的 Rails 应用程序中,我创建了两个模型来连接到这些表,我调用了:

formation_dbreference_db.

这里是我的模型代码:

class ReferenceDb < ActiveRecord::Base
        establish_connection "#{Rails.env}_db2"
        self.table_name = "f_partecipanti"
    self.primary_key = 'id'


        belongs_to :formation_db 

end

class FormationDb < ActiveRecord::Base
        establish_connection "#{Rails.env}_db2"
        self.table_name = "f_aziende"
    self.primary_key = 'id'


        has_many :reference_dbs , :foreign_key => "id_azienda"

end

问题是我无法更新与 formation_db 关联的所有行。另外,我不确定这两个模型的关联是否正确。我的意思是,在这种情况下,rails 单词的约定是什么?

在我的其他项目中,我通常写:

@company.update_attributes(params[:company])

我用一行代码更新了所有与公司相关的东西。 在我的案例中如何创建类似的东西?

你正在危险地接近 "multi tenancy" 线,我认为这就是你 运行 陷入困境的原因。

无论如何,I found there's a way连接到其他数据库而不必在每个模型中重新声明它:

#app/vendor/db.rb
class Db < ActiveRecord::Base
    establish_connection "#{Rails.env}_db2"
end

#app/models/reference_db.rb
class ReferenceDb < Db
   self.table_name = "f_partecipanti"
   belongs_to :formation_db 
end

#app/models/formation_db.rb
class FormationDb < Db
   self.table_name = "f_aziende"
   has_many :reference_dbs , :foreign_key => "id_azienda"
end

这至少会简洁地设置您的模型。

--

这些模型将像 Rails 中的任何其他模型一样工作。唯一需要注意的是,您不能跨不同的数据库加入; IE 不能使用上述数据库 has_many :through

@company = Company.find params[:id]
@company.update_all ....