Ruby on rails 如何通过映射两个表中的不同键并在列值上隐含一些逻辑来创建关联

Ruby on rails 如何通过映射两个表中的不同键并在列值上隐含一些逻辑来创建关联,ruby-on-rails,database,activerecord,associations,Ruby On Rails,Database,Activerecord,Associations,我有两张桌子 内容(主键:id,另一栏:模块\u\u id:string) ContentDetails(主键:id,另一栏:coach\u id:string) 例如: 模块\u沙发\u id=>“向世界问好” 沙发id=>“system.content.向世界问好。en.us.192” 如何在内容类中定义关联,以便执行此操作 Content.first.Content\u详细信息&从第二个文件检索数据 您需要将类型为integer的列content\u id添加到ContentDetails

我有两张桌子

内容(主键:id,另一栏:模块\u\u id:string)

ContentDetails(主键:id,另一栏:coach\u id:string)

例如:

模块\u沙发\u id=>“向世界问好”

沙发id=>“system.content.向世界问好。en.us.192”

如何在内容类中定义关联,以便执行此操作

Content.first.Content\u详细信息&从第二个文件检索数据


您需要将类型为
integer
的列
content\u id
添加到
ContentDetails
表中。此列将
内容
内容详细信息
联系在一起

然后在模型中定义以下内容,如下所示:

class Content < ActiveRecord::Base
  has_many :content_details
end

class ContentDetail < ActiveRecord::Base
  belongs_to :content
end
类内容
您应该能够:


Content.first.Content\u详细信息

这种方法应该有效:

has_many :content_details, -> (object) { where("couch_id like ?", "%#{object.module_couch_id}%") }, :foreign_key => 'couch_id'

是的,我知道,但是我没有对表的写访问权限,所以关联需要驻留在module_coach_id&coach_id字段中,因此,问题是如何编写一个没有content_id字段但两个表中coach_id字段的关联定义
content_details
模型中的
def content_details ContentDetails.map{cd | return cd if cd.coach_id.include?self.module_coach_id}现在运行
Content时结束
。首先。Content\u details
它将返回您需要的记录。很好,但是如果我执行
Content.all
&然后尝试对每个
内容迭代单个
ContentDetails
,这将导致
n+1
查询问题,我正在尝试建立一个关联,以便我可以快速加载它。我们可以在内容模型中这样做:
有很多:内容详细信息,:foreign\u key=>:coach\u id
但是你的
模块coach\u id
coach\u id
有不同的值,需要应用
include?
方法来检查coach\u id是否有子字符串module\u coach\u id。是的,这就是我想知道的关于如何指定
包含?
条件和
有多个
块,这应该是可行的:
有很多:内容详细信息,->(对象){where(“coach\u id like?”,“%{object.module\u coach\u id}%”,},:foreign\u key=>“coach\u id”