代码之家  ›  专栏  ›  技术社区  ›  unknownuser

如何在Rails中执行联接查询?

  •  4
  • unknownuser  · 技术社区  · 16 年前

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

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

    我知道这将是一种有很多关系的关系。主列表记录有许多注册。注册属于学生。

    class Student < ActiveRecord::Base
        has_many :enrollments
    end
    
    class Enrollment < ActiveRecord::Base
       belongs_to :student
    end
    

    这是两者之间的正确关系吗?如果是,如何对共享列执行联接查询?

    4 回复  |  直到 16 年前
        1
  •  6
  •   Tim Knight    16 年前

    是的,ActiveRecord将为您管理关系,但您也可以在搜索关系中的条件时指定联接。例如:

    User.find(:all, :joins => :phone_numbers, :conditions => { :phone_numbers => {:name => 'business'} })
    

    注意,尽管只在Rails 2.2中使用条件声明的哈希值

    但大多数时候只使用ActiveRecord关系 has_many 应该很好,正如上面的答案中所提到的,您可以调用对象,就像它直接在模型上一样… @student.enrollments

        2
  •  6
  •   mwilliams    16 年前

    理想情况下,Rails需要以下列:

    Student table:
    - id
    
    Enrollment table:
    - student_id
    

    这样做的话,你的关系应该会起作用。

    然后,要尝试一下,请掉进Rails控制台并四处播放:

    @student = Student.first
    @student.enrollments
    

    看看这个关于使用关联的很棒的Rails参考:

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

        3
  •  0
  •   allesklar    16 年前

    Mwilliams所说的加上确保你想要一个多对多的协会,当你遵循指南。

        4
  •  0
  •   cnikolaou    16 年前

    联合查询是通过ActiveRecord通过关联自动完成的。