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