假设我有两个表,一个包含个人信息的学生主列表,以及一个班级中的学生注册列表。这两个表共享一个公共列,这是一个唯一标识学生的字符串,但它不是主键。
说我想显示页面上的所有注册,以及来自学生的一些个人数据(比如说可能是家乡)。
我明白这将是一个很好的关系。主列表记录有许多注册。注册属于学生。
class Student < ActiveRecord::Base
has_many :enrollments
end
class Enrollment < ActiveRecord::Base
belongs_to :student
end
这是两者之间的正确关系,如果是这样,我该如何对共享列进行连接查询?
答案 0 :(得分:6)
理想情况下,Rails期望以下列:
Student table:
- id
Enrollment table:
- student_id
这样做,你的关系应该有效。
然后尝试一下,进入Rails控制台并玩游戏:
@student = Student.first
@student.enrollments
看一下使用关联的这个伟大的Rails参考:
答案 1 :(得分:6)
是ActiveRecord将为您管理关系,但您也可以在关系中搜索条件时指定联接。例如:
User.find(:all, :joins => :phone_numbers, :conditions => { :phone_numbers => {:name => 'business'} })
请注意,虽然条件声明的哈希值仅在Rails 2.2中使用
但是大部分时间只使用与has_many
的ActiveRecord关系应该没问题,正如上面的答案所提到的那样,你可以像使用模型一样直接调用对象... {{1} }
答案 2 :(得分:0)
当你遵循指南时,mwilliams所说的加上确保你想要多对多关联。
答案 3 :(得分:0)
通过ActiveRecord关联自动完成联接查询。