'Pg_Search don't filter model referenced to another
I'm renewing a small library app and my search filter (pg_search) doesn't work with a model that is referenced with another (in this case, model Book as User references, for each user to have it's own set of books). But if i delete the references, the search works... In the case that if the books were available to every user but that's not the purpose. What am i missing? Thanks in advance for any help.
Book.rb
class Book < ApplicationRecord
belongs_to :user
include PgSearch::Model
pg_search_scope :search_by_full_name, against: [:title, :author],
using: { tsearch: { prefix: true } }
validates :title, presence: true
validates :author, presence: true
end
User.rb
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :books
end
books_controller.rb
class BooksController < ApplicationController
def index
if params[:term].present?
@books = Book.search_by_full_name(params[:term])
else
@books = Book.all
end
end
def show
@book = Book.find(params[:id])
end
def new
@user = User.find(params[:user_id])
@book = Book.new
end
def create
@user = User.find(params[:user_id])
@book = Book.new(book_params)
@book.user = @user
if @book.save
redirect_to user_books_path
flash[:notice] = 'Success. Your book was added to the Library'
else
render "new"
flash[:notice] = 'Book not created. Please try again'
end
end
def edit
@user = User.find(params[:user_id])
@book = Book.find(params[:id])
end
def update
@book = Book.find(params[:id])
@book.update(book_params)
redirect_to user_book_path
end
def destroy
@book = Book.find(params[:id])
@book.destroy
redirect_to user_books_path
end
private
def book_params
params.require(:book).permit(:title, :author, :photo, :comments)
end
end
_search_book.html.erb
<%= form_tag user_books_path(current_user.id, @book), method: :get do %>
<%= text_field_tag 'term', params[:term], placeholder: "Enter title or author" %>
<%= submit_tag 'Search!' %>
<% end %>
Solution 1:[1]
It's solved... I was using current_user on the views instead of applying all the method on the controller and on the view leave it with only the model instance. Thanks everyone
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Funk Dr |
