如何在rails中执行外键字段属性的搜索查询?

时间:2017-04-07 06:34:06

标签: ruby-on-rails activerecord

我有两个模型ExamStudent

exam.rb

class Exam < ApplicationRecord
  belongs_to  :year
  belongs_to  :student, class_name: "Student"


  def self.search(search)
    if search
      self.where('student. LIKE ?', "%#{search}%")
    else
      self.all
    end
  end
end

student.rb

class Student < ApplicationRecord
  belongs_to  :year
  has_many  :exams
end

student中的exam.rb字段指的是Student对象。但是,模型Student具有属性name,我想根据该属性执行搜索,并找出该学生所参加的考试列表。是否可以进行此类查询?如果是这样,那么实施它的正确方法是什么?

谢谢

3 个答案:

答案 0 :(得分:0)

您可以使用joinswhere

来实现它
exams_list = Exams.joins(:student).where('students.name LIKE ?', "%#{search}%"))

希望它有所帮助。

答案 1 :(得分:0)

您可以尝试:

def self.search(search)
  if search
    self.joins(:student).where('students.name LIKE ?', "%#{search}%")
  else
    self.all
  end
end

希望它有所帮助。

答案 2 :(得分:0)

如果您想搜索文本而不管或大写(大写),您可以使用ilike选项进行更好的搜索:

exams_list = Exams.joins(:student).where('students.name ilike ?', "%#{search}%"))

希望它有所帮助。