когда работает функция поиска, это вызывает ошибку на маршрутах вложения - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь реализовать поиск на странице индекса. Однако это влияет на вложенный маршрут отдельной записи, когда я добавляю код. [Я пробовал гемы, используя elsif и все, что только мог придумать].

Для контекста я использую книги, принадлежащие сценарию авторов.

Я хотел бы реализовать это:

@comicbooks = Comicbook.search(params[:search])

здесь:

 def index

@comicbooks = @comicbooks.filter_by_name(params[:name]) 
 if params[:person_id]
      person = Person.find_by(id: params[:person_id])
      @comicbooks = person.comicbooks

    else
      @comicbooks = Comicbook.all
    end
  end

Вот моя модель:

class Comicbook < ApplicationRecord
  belongs_to :person
  belongs_to :squad
  validates :title, presence: true, uniqueness: { scope: :person }

def self.search(search)
  if search
    find(:all, :conditions => ['name Like ?', "%#{:search}%"])
  else
    find(:all)
  end
end

  def person_attributes=(args)
    self.person = Person.find_or_create_by(args)
  end

  def squad_attributes=(args)
    self.squad = Squad.find_or_create_by(args)
  end
end

Вот форма поиска в представлении

 <%= form_tag comicbooks_path, :method => :get do %>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search" , :name => nil %>
    <% end %>

Какой лучший способ реализовать поиск, не выбрасывая другие маршруты? Я пробовал много драгоценных камней, но они усложнили вещи больше, чем я могу понять.

Заранее спасибо.

1 Ответ

0 голосов
/ 21 февраля 2020

Вы можете использовать область действия в вашей модели и цепь в вашем контроллере.

Модель:

 scope :search, -> (search) do
    return if search.blank?
    where('name Like ?', "%#{:search}%")
  end

Контроллер:

@comicbooks = Comicbook.filter_by_name(params[:name]).search(params[:search])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...