【问题标题】:Is there a way to specify an association_foreign_key for a belongs_to relation?有没有办法为belongs_to 关系指定association_foreign_key?
【发布时间】:2014-05-25 21:20:39
【问题描述】:

我有一个使用belongs_to 关系的模型。我希望能够同时指定 foreign_keyassociation_foreign_key 值。但是,我只能为belongs_to 关系(http://guides.rubyonrails.org/association_basics.html#belongs-to-association-reference)指定foreign_key 值。有没有办法解决这个问题?

这是我的例子:

我有一个客户端模型。它的 location_id 键必须属于 Region 模型,其中 id 由 place_id 引用。我想做的是:

class ClientId < ActiveRecord::Base
  belongs_to :region, foreign_key: 'location_id', association_foreign_key: 'place_id'

但是,我无法在此处指定 association_foreign_key...

【问题讨论】:

  • 你没有解释清楚。你是说Region 的主键是place_id?在这种情况下你不需要association_foreign_key,因为它不是has_and_belongs_to_many

标签: ruby-on-rails activerecord associations belongs-to


【解决方案1】:

关联不需要在同一模型中以两种方式声明。您必须声明: has_one/many 在其他相关模型中。

class Client < ActiveRecord::Base
  belongs_to :region, foreign_key: 'location_id'

class Region < ActiveRecord::Base
  has_many :clients, foreign_key: 'place_id'

【讨论】:

  • 好的,谢谢!只是为了确保:如果存在 0 关系,has_many 是否有意义?例如这里一个区域可以有 0 个客户端。这就是为什么我不愿意在Region 模型中指定这种关系
  • 如果调用,您的 Region.clients 将返回并清空记录。但您可能需要向某个地区的某些客户发送电子邮件,或过滤建议算法。谁知道...
  • 根据guides.rubyonrails.org/v2.3.11/… (4.1.2.6) 和guides.rubyonrails.org/v2.3.11/… (4.3.2.9),foreign_key 指的是has_many 和另一个表中的belongs_to 中的键。所以这里两者都应该等于'location_id' 对吧?
  • 假设您有一个 region_id 为 1 的客户。并且您有一个 ID 为 1 的区域,当声明 has_many :customers 并调用:Region.find(1).customers rails 将在客户中搜索具有 region_id: 1 的整个客户数组。当声明一个 belongs_to: 区域时。在执行 Customers.first.region 时,rails 将查找 region_id: 1 并返回一个对象。外键可以不按约定命名。 Region_name:地区_大陆。 Rails 将转到 Regions 表并在该字段中查找该区域。
猜你喜欢
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多