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

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

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

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

Q&A

解決済

1回答

2144閲覧

【RoR】ransackを使わずviewから検索条件を渡す

pecchan

総合スコア555

Ruby on Rails

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

0グッド

0クリップ

投稿2017/10/17 03:59

お世話になっております。

検索画面は、今までransackを使っていましたが、
ちょっと複雑なSQL文になるため、今回はransackを断念。
find_by_sql()を使う方法を採用しました。

この場合、画面から日付、所属部署、社員名などの検索条件を渡したいのですが、
具体的なview側の記述がよく分かりません。

ransackを利用していた検索画面のviewコードをそのまま持ってきてもエラーになりました。

以下がそうです。

まず「search_form_for」はransackのメソッドなので「form_tag」に置換えました。
すると添付画像のようなエラーになりました。

ransack gemを使わず、検索条件を渡す方法を教えて下さい。
宜しくお願い致します。

ruby

1 <div class="contents-box"> 2 <!-- 検索条件 --> 3 <%= search_form_for(@q, url: today_plans_path, html: { method: :get, class: 'form-horizontal', role: 'form' }) do |f| %> 4 <div class="row" > 5 <div class="col-sm-12"> 6 <div class="row row_input"> 7 <label class="col-sm-1 control-label" for="">日付</label> 8 <div class="col-sm-8"> 9 <%= f.text_field :plan_date_gteq, class: 'form-control date-picker', value: params[:q] ? params[:q][:plan_date_gteq] : Date.today, 'data-today': Date.today %> ~ <%= f.text_field :plan_date_lteq, class: 'form-control date-picker', value: params[:q] ? params[:q][:plan_date_lteq] : Date.today, 'data-today': Date.today %> 10 </div> 11 </div> 12 13 <div class="row row_input"> 14 <label class="col-sm-1 control-label" for="">所属</label> 15 <div class="col-sm-8"> 16 <%= f.collection_select :department_id_eq, Department.all, :id, :dep_name, { include_blank: true } , { class: 'form-control' } %> 17 <%= f.collection_select :section_id_eq, params[:q].present? ? Section.where(department_id: params[:q][:department_id_eq]).all : [], :id, :sec_name, { include_blank: true }, { class: 'form-control' } %> 18 <%= f.collection_select :group_id_eq, params[:q].present? ? Group.where(section_id: params[:q][:section_id_eq]).all : [], :id, :grp_name, { include_blank: true }, { class: 'form-control' } %> 19 <%= f.collection_select :employee_id_eq, @employees, :id, :emp_name, { include_blank: true }, { class: 'form-control' } %> 20 </div> 21 </div> 22 23 <div class="row row_input"> 24 <label class="col-sm-1 control-label" for="">社員名</label> 25 <div class="col-sm-8"> 26 <%= f.text_field :employee_emp_name_cont, class: 'form-control' %> 27 </div> 28 </div> 29 30 31 </div> 32 </div> 33 <br> 34 <div class="row"> 35 <div class="col-sm-12 text-center"> 36 <button class="btn btn-default btn-primary" type="submit"><i class="fa fa-search"></i> 検索</button> 37 <button class="btn btn-default" id="search_reset">クリア</button> 38 </div> 39 </div> 40 <% end %> 41 </div> 42 43 44

イメージ説明

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

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

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

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

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

gouf

2017/10/25 07:41

ransack を使用した場合の挙動(form が作成される、URI クエリ文字列が付与される etc...)を観察してみると、オリジナル版の実装のヒントになるかもしれません
guest

回答1

0

自己解決

ransackを使わず一から作ることで理解出来ました。有難う御座いました。

投稿2017/10/26 03:11

pecchan

総合スコア555

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問