8806


railsで[ransack](https://github.com/activerecord-
hackery/ransack)および[kaminari](https://github.com/amatsuda/kaminari)を使って表示件数(per)を可変に設定できる検索画面を作っております。

![表示件数](https://i.stack.imgur.com/WDQZC.png)  
↑こちらのセレクトボックスには[20, 50, 100, 500]が入ってます。

`app/controller/items_controller`

[code]

    def index
      @q = Item.ransack(params[:q])
      @items = @q.result.page(params[:page]).per(params[:display_number])
    end
    
[/code]

`app/view/items/index.html.slim`

[code]

    - # 検索部分
    = search_form_for @q, url: search_items_path, method: :post do |f| 
      = f.text_field :name_cont, :placeholder => '氏名'
      = hidden_field_tag :display_number, params[:display_number]
      = f.submit "エクスポート", :class => "btn btn-default", :id => "csv_dl_submit" if @login_user[:csv_flg]
    
    -# ~~~~略~~~=
    
    -# 表示部分
    span 表示件数
      = select_tag :change_display_number, options_for_select([20, 50, 100, 500], params[:display_number]), :class => "form-control input-sm"
      span 件
    table
      thead
        tr
          th 氏名
      tbody
        - @items.each do |item|
          tr
            td = web_access.family_name
    
[/code]

となっており、  
表示部分の`:change_display_number`の中身を  
検索部分の`params[:display_number]`に渡したいと思います。

`form`タグの中に入っていない`params`はどのように受け渡すのがスマートなのでしょうか?


CC BY-SA 3.0
2015-04-06T00:53:41.950
8804
2015-06-23T22:30:14.530
2015-06-23T22:30:14.530
10150
9177
question
ruby-on-rails ruby slim-lang
ransack+kaminariで可変ページ表示


> formタグの中に入っていないparamsはどのように受け渡すのがスマートなのでしょうか?

単純にformタグの中に入れてしまうのが一番シンプルでスマートだと思います。

[code]

    = search_form_for @q, url: search_items_path, method: :post do |f| 
      = f.text_field :name_cont, :placeholder => '氏名'
      = hidden_field_tag :display_number, params[:display_number]
      = f.submit "エクスポート", :class => "btn btn-default", :id => "csv_dl_submit" if @login_user[:csv_flg]
    
      -# ~~~~略~~~=
    
      -# 表示部分
      span 表示件数
        = select_tag :display_number, options_for_select([20, 50, 100, 500], params[:display_number]), :class => "form-control input-sm"
        span 件
    
      -# ~~~~formタグで囲まれるのはここまで~~~=
    
    table
      thead
        tr
          th 氏名
      tbody
        - @items.each do |item|
          tr
            td = web_access.family_name
    
[/code]

formタグの中に入れられない制約がもしあれば、その理由を詳しく教えてください。

formタグに入れられないのであれば、ボタンクリックのイベントをJavaScriptでフックして、セレクトボックスの選択値をhiddenタグに放り込む、といったやり方が考えられますが、そんなことはせずにformタグに含めてしまう方が断然ラクだと思います。

余談ですが、通常の検索処理はデータの更新を伴わないので、methodはpostではなくgetにするのが一般的です。


CC BY-SA 3.0
2015-04-06T02:36:15.943
8806
2015-04-06T02:36:15.943
85
8804
answer