数分できたので多分最高にシンプル。
コントローラにクラスメソッド追加。
def index @commands = Pipe.search(params[:q]).paginate(page: params[:page]) end
モデルにロジック記述。ポイントはCase insensitiveにしているところとOR検索してるところ。
def self.search(query)
if query.present?
q = query.downcase
Pipe.where('lower(title) LIKE ?', "%#{q}%").or(Pipe.where('lower(line) LIKE ?', "%#{q}%"))
else
Pipe.all
end
end
Viewはこんな感じ。
<%= form_with(url: '/cmds', method: 'get', local: true) do %>
<%= text_field_tag(:q, "", class: "uk-input uk-form-width-medium") %>
<%= submit_tag("Search", class: "uk-button uk-button-default") %>
<% end %>