検索画面をポップアップ(モーダル)で表示したいため、
Ransack + bootstrap modalで実装しようとしています。
単体では、
・Ransackで検索画面は作れました
・bootstrap modalでポップアップは表示できました
ですが、ここから先がよく分かりません。
検索画面の初期状態といいますか、検索を実行する前のビュー(_choice_employee.html)
を表示したいのですが、その具体的な記述が分かりません。
とりあえずTOPページから呼ぼうと以下のように記述。
rails sでエラーが出ました。
エラーメッセージ
「No Ransack::Search object was provided to search_form_for!」
そもそも「search_form_for」にコントローラ経由でアクセスしていないため、渡す@qが無いですし、間違っていると思っています。
しかしながら、_choice_employee.htmlのsearch_form_forを初期表示で使いたく。
どうすれば良いでしょうか?
どうぞ宜しくお願い致します。
■■■■■■■■■■■■■■■■■■■■■■
以下ビュー
■■■■■■■■■■■■■■■■■■■■■■
app\views\shared_search_box.html.erb
ruby
1<div class="panel panel-default"> 2 <div class="panel-heading"> 3 <h3 class="panel-title"><i class="fa fa-search"></i> 検索条件</h3> 4 </div> 5 <div class="panel-body"> 6 <%= yield %> 7 </div> 8</div>
app\views\shared_search_result_box.html.erb
ruby
1<h1>検索結果</h1> 2<%= yield %>
app\views\employees_search_form.html.erb
ruby
1<%= render layout: 'shared/search_box' do %> 2 3<div class="row"> 4<div class="col-sm-6"> 5 <div class="form-group"> 6 <label class="col-sm-4 control-label" for="">社員コード</label> 7 <div class="col-sm-8"> 8 <%= f.text_field :code_cont, class: 'form-control' %> 9 </div> 10 </div> 11 12 <div class="form-group"> 13 <label class="col-sm-4 control-label" for="">社員名</label> 14 <div class="col-sm-8"> 15 <%= f.text_field :name_cont, class: 'form-control' %> 16 </div> 17 </div> 18 19 <div class="form-group"> 20 <label class="col-sm-4 control-label" for="">社員名カナ</label> 21 <div class="col-sm-8"> 22 <%= f.text_field :name_kana_cont, class: 'form-control' %> 23 </div> 24 </div> 25 26 <div class="form-group"> 27 <label class="col-sm-4 control-label" for=""></label> 28 <div class="col-sm-6"> 29 <div class="checkbox"> 30 <label> 31 <%= f.check_box :availability_true %> 32 在職中 33 </label> 34 </div> 35 </div> 36 </div> 37</div> 38 39 40 41<div class="col-sm-12 row text-center"> 42 <%= link_to employees_path, class: 'btn btn-default btn-left' do %>クリア<% end %> 43 <button class="btn btn-default btn-primary" type="submit"><i class="fa fa-search"></i> 検索</button> 44</div> 45 46</div> 47 48<% end %>
app\views\employees_choice_employee.html.erb
ruby
1<% content_for(:title) do %> 2 社員選択 3<% end %> 4 5<%= search_form_for(@q, url: search_employees_path, html: { method: :get, class: 'form-horizontal', role: 'form' }) do |f| %> 6 <%= render 'search_form', f: f %> 7<% end %> 8``` 9 10app\helpers\simple_search_form_helper.rb 11```ruby 12module SimpleSearchFormHelper 13end 14``` 15 16■■■■■■■■■■■■■■■■■■■■■■ 17以下モデル 18■■■■■■■■■■■■■■■■■■■■■■ 19app\models\employee.rb 20```ruby 21class Employee < ApplicationRecord 22end 23 24``` 25 26■■■■■■■■■■■■■■■■■■■■■■ 27以下コントローラ 28■■■■■■■■■■■■■■■■■■■■■■ 29app\controllers\employees_controller.rb 30```ruby 31# coding: utf-8 32class EmployeesController < ApplicationController 33 34 def index 35 @employee = Employee.order(sort_column + ' ' + sort_direction) 36 end 37 38 def choice 39 @q = Employee.search 40 end 41 42 def search 43 @q = Employee.search(search_params) 44 45 @employees = @q 46 .result 47 .order(availability: :desc, code: :asc) 48 .decorate 49 50 end 51 52 53 #検索条件 54 def search_params 55 search_conditions = %i( 56 code_cont name_cont name_kana_cont availability_true 57 price_gteq price_lteq purchase_cost_gteq purchase_cost_lteq 58 ) 59 params.require(:q).permit(search_conditions) 60 end 61 62 63end 64 65``` 66 67■■■■■■■■■■■■■■■■■■■■■■ 68以下呼出し側 69■■■■■■■■■■■■■■■■■■■■■■ 70 71app\views\top/index.html.erb 72```ruby 73<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal"> 74Launch demo modal 75</button> 76- 77 78<%= render 'employees/choice_employee' %> 79 80 81``` 82 83 84 85■■■■■■■■■■■■■■■■■■■■■■ 86以下ルーティング 87■■■■■■■■■■■■■■■■■■■■■■ 88 89```ruby 90 #社員 91 resources :employees do 92 collection do 93 get :choice 94 get :search 95 end 96 end 97 98```
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/25 22:56 編集
2017/04/25 23:58
2017/04/26 01:35 編集
2017/04/26 06:56
2017/04/26 07:54
2017/04/27 01:53
2017/04/27 04:21
2017/04/27 05:55
2017/04/27 08:15