使用连接的太阳黑子搜索关联

sunspot search assiocation using joins

下面是模型列表及其关系:

class Section
  has_many :students, as: :resource

  searchable do 
    integer :id
    join(:first_name, prefix: "student", target: Student, type: :text, join: {from: :resource_id, to: :id})
    join(:last_name, prefix: "student", target: Student, type: :text, join: {from: :resource_id, to: :id})
   end
end

class Student
  belongs_to :resource, polymorphic: true, optional: false

  has_many :contact_number, as: :resource

  searchable do
    
    text :first_name
    text :last_name

    integer :id
    integer :resource_id


    string :first_name
    string :last_name

  end
end


class ContactNumber
  belongs_to :resource, polymorphic: true, optional: false
end

正如你在我的 class 模型中看到的那样 Section 有很多学生。由于连接的帮助,我可以搜索学生“first_name”和学生“last_name”。有没有可能的方法来搜索学生的联系电话。使用联接???或者在 Section 模型中搜索联系电话的解决方法是什么?

在我的 ContactNumber 模型中,我创建了另一个连接

class ContactNumber
  searchable do
    string :ref_id do
      if resource_type == "Student"
        [resource.resource_type, resource.resource_id].join("_").downcase()
      end
   end
end

在我的学生模型中

searchable do 
  string :ref_id do
  [resource_type, resource_id].join("_").downcase()
end

  join(:content, prefix: "contact_number", target: ContactNumber, type: :text, join: {from: :ref_id, to: :ref_id})
end

最后在我的部分 class

class Section 
   searchable do
    string :ref_id do
  [self.class.name, id].join("_").downcase()
end
join(:content, prefix: "number", target: ContactPerson, type: :text, join: {from: :ref_id, to: :ref_id})
   end
end