質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

4125閲覧

ransackで検索ページと検索結果ページを分けたい

sara

総合スコア11

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2017/04/21 10:58

何をしたいか

rails初心者です。現在ransackを使って検索機能を実装しています。
ransack自体で検索機能をつけるのはできたのですが、これをチュートリアル通りではなく、検索フォームと検索結果を分けたいです。

コード

コードはgithubやrailscastsに書いてある通りにかきました。

ruby

1def index 2 @q = Person.ransack(params[:q]) 3 @people = @q.result(distinct: true) 4end

ruby

1<%= search_form_for @q url: search_people_path, html: { method: :post }do |f| %> 2 3 # Search if the name field contains... 4 <%= f.label :name_cont %> 5 <%= f.search_field :name_cont %> 6 7 # Search if an associated articles.title starts with... 8 <%= f.label :articles_title_start %> 9 <%= f.search_field :articles_title_start %> 10 11 # Attributes may be chained. Search multiple attributes for one value... 12 <%= f.label :name_or_description_or_email_or_articles_title_cont %> 13 <%= f.search_field :name_or_description_or_email_or_articles_title_cont %> 14 15 <%= f.submit %> 16<% end %>

ruby

1resources :people do 2 collection do 3 match 'search' => 'people#search', via: [:get, :post], as: :search 4 end 5end

ruby

1def search 2 index 3 render :index 4end

上記通りに書いたら検索機能を追加できました。

検索結果を分けたい

上記だと一覧画面に検索フォームが表示され、同じ画面に検索結果が表示されます。

しかし、検索フォームが開く → 検索ボタンを押す → 検索結果一覧 という流れで実装したいです。

初心者なのでまだ理解できていない部分が多々ありますが、優しい人ご教授お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

優しいかどうかの自信はございませんが

検索フォームが開く → 検索ボタンを押す → 検索結果一覧 という流れで実装したいです。
うーん、なかなかレガシーのデスクトップアプリの発想に毒されているような気がします。
でも、検索項目が5個を超えると見にくいのは確かですしね。

解決策は2つあります。
コードを全くいじらずに、indexの検索フォームをデフォルトで非表示にする(display: none;とかで)→検索フォーム表示ボタン(jsで一行jquery showとかで) → 検索フォーム表示 → 検索ボタンを押す → 検索結果一覧(検索フォームはデフォルトで非表示)
これが一番オススメです、バカみたいですが、webアプリはこういう仕様にした方が負荷が少なく確実です。
※デスクトップアプリの発想に毒されているような気がすると言ったのはこれが理由です。
または
検索フォーム用の
def search_form
@q = Person.ransack(params[:q])
render :partial=>'search'
end
を作りrouteを定義して
index.heml.erb
<%= render :partial=>'search'%>
を消去して代わりに
<%= link_to('検索画面表示' ,{controller: :people,action: search_form})%>
をいれてください。
これがデスクトップアプリの発想です。

まあ、ここまでが、railsの内容です。

ここから下はjavascriptやcss、jquery等がメインの話です
もし、saraさんがおっしゃるフォームが開くというのが
ホップアップするフォーム(モーダルウインドウという)であるならば。
Railsでテーブルをクリックしたときに詳細画面をモーダルウィンドウで表示したい。
とかを参考に、実装してください
私的には、記述量と覚えることの少ないbootstrapをオススメします。

投稿2017/04/22 02:21

編集2017/04/22 02:23
moke

総合スコア2241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問