ransackで検索機能を追加する
検索機能をransackで導入してみた
作っているサイトの検索機能にransackを使ってみたので、備忘録
ほぼ参考資料の通りに行っています。
Gemfile
gem 'ransack'
ターミナル
bundle install
routing
routes.rbにcollectionでsearchを加える
routes.rb
resources :institutions do
collection do
get 'search'
end
end
ターミナル
search_institutions GET /institutions/search(.:format) institutions#search
普通にgetしてもルーティングはできた
rb.routes.rb
get "institutions/search"
ターミナル
institutions_search GET /institutions/search(.:format) institutions#search
controller
controller.rb
before_action :set_q, only: [:index, :search]
def search
@results = @q.result
end
private
def set_q
@q = Institution.ransack(params[:q])
end
view
index.html.erb
<h1>医療機関検索</h1>
<%= search_form_for @q, url: search_institutions_path do |f| %>
<%= f.label :name_cont, '医療機関名' %>
<%= f.search_field :name_cont %>
<br>
<%= f.submit '検索' %>
<% end %>
search.html.erb
<% @results.each do |institution| %> <!-- 検索結果を@resultsで受け取る -->
<tr>
<td>
<% if institution.image? %>
<%= image_tag institution.image.url, alt: "クリニック画像", class: "image" %>
<% else %>
<%= image_tag "default_institution_image.png", class: "image" %>
<% end %>
</td>
<td><%= institution.name %></td>
<td><%= institution.postcode %></td>
<td><%= institution.address %></td>
<td><%= institution.introduction%></td>
<td><%= link_to "編集", edit_institution_path(institution.id) %></td>
<td><%= link_to "削除", institution, method: :delete, data: {confirm: "本当に削除しますか"} %></td>
</tr>
<% end %>
メソッド
よく使いそうなものを抜粋しました。
メソッド | _eq | _start | _end | _cont | _lt | _lteq | _gt | _gteq |
---|---|---|---|---|---|---|---|---|
説明 | 完全一致 | 前方一致 | 後方一致 | 部分一致 | 未満 | 以下 | 大きい | 以上 |
参考資料
Author And Source
この問題について(ransackで検索機能を追加する), 我々は、より多くの情報をここで見つけました https://qiita.com/tuk19/items/035e0f86145d65a337b7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .