如何在rails中进行连接查询?

时间:2008-12-03 17:40:58

标签: ruby-on-rails ruby

假设我有两个表,一个包含个人信息的学生主列表,以及一个班级中的学生注册列表。这两个表共享一个公共列,这是一个唯一标识学生的字符串,但它不是主键。

说我想显示页面上的所有注册,以及来自学生的一些个人数据(比如说可能是家乡)。

我明白这将是一个很好的关系。主列表记录有许多注册。注册属于学生。

class Student < ActiveRecord::Base
    has_many :enrollments
end

class Enrollment < ActiveRecord::Base
   belongs_to :student
end

这是两者之间的正确关系,如果是这样,我该如何对共享列进行连接查询?

4 个答案:

答案 0 :(得分:6)

理想情况下,Rails期望以下列:

Student table:
- id

Enrollment table:
- student_id

这样做,你的关系应该有效。

然后尝试一下,进入Rails控制台并玩游戏:

@student = Student.first
@student.enrollments

看一下使用关联的这个伟大的Rails参考:

http://guides.rubyonrails.org/association_basics.html

答案 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关联自动完成联接查询。