Closed sumura80 closed 5 years ago
2.のransackで良いかなと思いました:bow: Elasticsearchは本番でも運用される本格的なものなので検索フォームを実装してみたいくらいの要件ならransackで十分かと思います:bow:
@rexitorg さん gemの選定に関するアドバイスありがとうございました。:bow: 下記のサイトを元に、Ransackというgemを使いナビゲーションバーに検索ボタンをつけることにしました。 https://qiita.com/fujitora/items/b2134bf6abcfda79c47f
その際に、Application_controller(全画面で検索ができるよう)にアクションを追加しました。Postの名前(:title)を元に検索をかけようと思っています。
ここで、検索結果を新しく検索結果画面(/search)を作成しそこに表示したいと思っています。そこで、コントローラに、 redirect_to search_path
を追加し画面遷移してそこで結果を表示しようとしました。
def search
#random 原型=> @search = Article.search(params[:q])
@query = Post.ransack(params[:q]) #ransackメソッド推奨
@search_posts = @query.result
redirect_to search_path
end
Routeも追加しました。:arrow_down:
app/config/route.rb
get 'search', to:'layouts#search'
rake routes
の結果は下記の通りです。:arrow_down:
search GET /search(.:format) applications#search
しかしこのやり方だと、application_controllerに記述した redirect_to search_path
のために画面がエラーになります。:x:
どのようにして、ナビゲーションバーのSubmitを押して、検索結果画面(/search)を表示させて検索結果も表示すればよろしいでしょうか?(posts/indexは使いません)
よろしくお願いいたします。:bow:
下記がソースコードになります。 https://github.com/sumura80/med_plus_bs4_updated_master/pull/15
/app/db/seeds.rbにテストデータも保存しておきました。
User.create(email: 'admin@com',username: 'tester',admin: 'true', password: 'password')
User.create(email: 'test@com',username: 'tester',admin: 'false', password: 'password')
Category.create(name:"Pain Relief")
Post.create(category_id: 2, title: 'Sample med', active_regular: 'bespoke XOXO slow-carb selvage lumbersexual wayfarers jean shorts irony cardigan fingerstache kombucha.', user_id: 1, image: open("./app/assets/images/sample_med_01.jpg"))
@rexitorg さん お疲れ様です。内容を少し修正してみたのですが、ransack gemの設定中でエラーがでしまいます。:sob:
検索対象のモデルとひも付きが強いControllerのPostコントローラにメソッドを設置してみました。 app/controllers/posts_controller
class PostsController < ApplicationController
# before_action :search
before_filter :set_search
def search
#これ原型=> @search = Article.search(params[:q])
@query = Post.ransack(params[:q]) #ransackメソッド推奨
@search_posts = @query.result(distinct: true)
render 'search'
end
end
Routeも下記のように設定いたしました。:arrow_down:
#ransackを使った検索結果表示の画面search
get 'search', to: 'posts#search'
Viewは下記の通りです。:arrow_down: app/views/posts/search.html.erb
<% @search_posts.each do |article| %>
<p><%= article %></p>
<% end %>
これが今エラーになってしまっております。:disappointed_relieved: app/views/layouts/_header.html.erb
<!-- Search box -->
<form class="form-inline my-2 my-lg-0">
<%= search_form_for @query, url: search_path do |f| %>
<%= f.text_field :title_cont ,placeholder: 'Search',class:"form-control mr-sm-2" %>
<%= f.submit "Submit" , class: 'btn btn-outline-success my-2 my-sm-0'%>
<% end %>
</form>
結構記事を探しているのですが、検索をする以前の問題です・・・
No Ransack::Search object was provided to search_form_for!
念のためコードを下記に保存いたしました。:arrow_down: https://github.com/sumura80/med_plus_bs4_updated_master/pull/15
ご助言頂ければ幸いです。よろしくお願いいたします。
def search
って検索結果表示ですよね?フォームを表示するにはヘッダーを表示する際にインスタンスが存在する必要があるのでトップページを表示するアクションの中でransackオブジェクトを初期化しておく必要があるのかなと思いました。
https://qiita.com/nishina555/items/2c1f8bae980e426519bc
でもフォームを表示するindexアクションでインスタンスを初期化していると思います:bow:
@rexitorg こちら無事にRansackを実装できました。:smiley: ありがとうございました。:bow:
クローズさせていただきます。
概要
現在作成中のアプリに検索機能を追加したい。 どのような機能で実装するのが最良の方法か見極めたい。 また実務ではどのような方法を使われているのか知りたいです。
困っていること
以前、
Elasticsearch
というgemを利用しアプリを作成する練習をしたがHerokuにはaddon
なしではあげられなかったので、今回はどのような検索方法を追加すれば良いか困っている。 下記の方法が今の所調べた中での候補です。 1.Ruby on Rails チュートリアル http://railstutorial.jp/chapters/following-users?version=4.0#sec-search2.Ransack gemを使用 3.Elasticsearcをaddonの
Bonsai Elasticsearch
を使用ご教示いただけませんでしょうか?よろしくお願いいたします。:bow: