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