30/09/2018, 19:17

Kết qủa trả về không như mong muốn khi dùng rails gem Pg search

Chào mọi người, mình đang sử dụng gem Pg Search trong dự án của mình và gặp phải vấn đề là khi mình nhập tên của một giáo viên vào search form trong schools/show.html.haml thì kết qủa trả về trong file teachers/index.html.haml là tất cả các giao viên, mặc dù mình nhập chính xác tên đầy đủ của giao viên đó luôn. Mình không biết là mình đã làm gì sai, cách đây mấy ngày mình có sử dụng searchkick gem thì tình gặp vấn đề tương tự. Mình đã search khắp các diễn đàn về rails, github, stackoverflow, và đã post vấn đề này lên nhưng vẫn chưa có ai trả lời. Thật sự rất là bế tắc. Hy vọng các bạn có thể cho mình lời khuyên hoặc cho mình một hướng đi mới. Mục đích chính của mình là cho phép người dùng có thể search giáo viên và trường học trong cùng một form, nhưng cách đó thì mình vẫn chưa biết nên đành phải làm là search trường học trước rồi cho search giáo viên sau. Đây là những file trong dự án của mình:

school.rb:

class School < ActiveRecord::Base
  include PgSearch
  has_many :teachers

  # Generate the method search to pass into the self.text_search
  pg_search_scope :search, against: [:name]

  def self.text_search(query)
    if query.present?
      search(query)
    else
      all
    end
  end
end

teacher.rb:

class Teacher < ActiveRecord::Base
  include PgSearch
  belongs_to :school
  has_many :ratings

  pg_search_scope :search, against: [:fullName]

  def self.text_search(query)
    if query.present?
      search(query)
    else
      all
    end
  end
end

schools/show.html.haml:

.text-center
  %h1= @school.name
  %em= link_to('Website', @school.website, target: '_blank')

/Teacher Search Form
.row
  %h1.text-center Tìm Giảng Viên
  = form_tag school_teachers_path(@school), :id => 'custom-search-input', method: :get, class: "input-group col-md-12", role: "search" do
    = text_field_tag :query,
            params[:query], class: "search-query form-control", placeholder: "Tên giảng viên, ví dụ: Nguyễn Văn A..."
    %span.input-group-btn
      = button_tag( :class => "btn btn-danger") do
        %span.glyphicon.glyphicon-search

teachers/index.html.haml:

.row
  %h1.text-center Tìm Giảng Viên
  = form_tag school_teachers_path(@school), :id => 'custom-search-input', method: :get, class: "input-group col-md-12", role: "search" do
    = text_field_tag :query,
            params[:query], class: "search-query form-control", placeholder: "Tên giảng viên, ví dụ: Nguyễn Văn A..."
    %span.input-group-btn
      = button_tag( :class => "btn btn-danger") do
        %span.glyphicon.glyphicon-search


- @school.teachers.each do |teacher|
  = link_to teacher.fullName, school_teacher_path(@school, teacher)

teachers_controller.rb:

class TeachersController < ApplicationController
  before_action :find_school
  before_action :find_teacher, only: [:show, :edit, :update, :destroy]

  def show
  end
 
  def index
    @teacher = @school.teachers.text_search(params[:query])
  end

  def new
    @teacher = @school.teachers.build
  end

  def create
    @teacher = @school.teachers.create(teacher_params)
    @teacher.save
      redirect_to(@school)
  end

  def edit
  end

  def update
    @teacher.update(teacher_params)
    redirect_to(@school)
  end

  private

  def find_school
    @school = School.find(params[:school_id])
  end

  def find_teacher
    @teacher = Teacher.find(params[:id])
  end

  def teacher_params
    params.require(:teacher).permit(:firstName, :lastName, :middleName, :department, :school_id, :fullName)
  end
end
Bài liên quan
0