ruby-on-rails - 与 Rails 中的旧表进行复杂连接

标签 ruby-on-rails ruby activerecord

我正在为发票/客户/契约(Contract)数据库编写相当简单的 Web 界面。 我希望我的模型具有以下结构:

class Invoice < ActiveRecord::Base
   set_table_name 't10_invoices'
   set_primary_key 'id_invoice'
   has_one :client
end

class Client < ActiveRecord::Base
   set_table_name 't20_clients'
   set_primary_key 'id_client'
   has_many :invoices
end

问题是我有以下数据库结构:

Tables:
t10_invoices:
   id_invoice - primary_key
   id_contract - foreign_key


t12_contracts:
   id_contract - primary_key      

t15_contracts_clients
   id_client - foreign_key
   id_contract - foreign_key

t20_clients
   id_client - primary_key

t20_clientst12_contractst15_contracts_clients 之间存在 1-1 关系 t20_clientst10_invoices 之间存在 1-n 关系。

:foreign_key:association_foreign_key 有什么区别?

问题是我无法修改数据库的结构,而且我在重新定义表名、外键、join_foreign_keys 等时完全迷失了... 我想要一种以普通 Rails 方式找到发票客户的简单方法 Invoice.find(:first).client

如果有任何建议和帮助,我将不胜感激。

最佳答案

创建一个ContractClient Join Model来对应t15_contracts_clients表。这指定表名并使用 belongs_to 关联 2 个外键:

class ContractClient < ActiveRecord::Base
  set_table_name 't15_contracts_clients'
  belongs_to :client, :foreign_key => :id_client
  belongs_to :contract, :foreign_key => :id_contract
end

Client指定表和主键:

class Client < ActiveRecord::Base
  set_table_name 't20_clients'
  set_primary_key 'id_client'
end

在 Invoice 上使用 belongs_to :contract_client 然后使用 has_one :through 通过 ContractClient 关联客户端:

class Invoice < ActiveRecord::Base
  set_table_name 't10_invoices'
  set_primary_key 'id_invoice'
  belongs_to :contract_client, :foreign_key => :id_contract
  has_one :client, :through => :contract_client
end

Invoice.find(:first).client 应该会按预期运行。

关于ruby-on-rails - 与 Rails 中的旧表进行复杂连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1908740/

相关文章:

Rails 布局文件中的 Javascript 文档元素

html - 如何制作侧边栏?

javascript - watir ruby​​ 文件上传 windows 交互

Ruby && 运算符结果没有意义

ruby-on-rails-3 - 如何配置 Active admin 支持 mongoid 和 active record?

ruby-on-rails - 需要从 database.yml 文件中获取用户名和密码,并传递给 rake 任务中的方法

ruby-on-rails - 在 Rails 中增加发票数量

ruby-on-rails - 邪恶的 gem 在更新操作中找不到婚礼 ID

ruby - 一种将 Ruby 中的单词数组限制为少于 N 个字符的代码?

mysql - 将 sql 查询转换为 Activerecord 查询 Rails 4