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

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

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

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

Ruby on Rails

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

Q&A

1回答

476閲覧

will_paginateを利用した状態でのモデルの条件検索とルーティング

lyzmfeqpxs54

総合スコア237

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2017/08/29 03:31

Railsでwill_paginateのgemをインストールしデータベースを10件ずつ表示している状態です。

ページに期間を指定するフォームを作っており、適用ボタンを押すとその範囲のデータのみを表示したいと考えております。こういった場合にupdateメソッドにどのように記載すればよいか分からずこちらで質問させていただきました(下にイメージ画像を貼ってあります)。

また、現在の表示ページが「user/XXXXXX」と言う形で、X部分は6桁の英数字のランダムのため、そういった場合のルーティングが分からず難航しております。

参考になるサイトなど構いませんのでご教示いただければ幸いです。
よろしくお願いいたします。

Ruby

1 2# app\views\user\personal.html.erb 3 4<%= form_with(model: @userinfo, url: '/user/update') do |f| %> 5<div class="from_date_field"> 6 <%= f.label :date, "期間" %> 7 <%= raw sprintf( 8 f.date_select( 9 :from_date, 10 use_month_numbers: true, 11 start_year: 2016, 12 end_year: (Time.now.year + 1), 13 default: Date.new(Time.now.year, Time.now.month, Time.now.day), 14 date_separator: '%s'), 15 '年 ', '月 ') + '日 ~ ' %> 16 <%= raw sprintf( 17 f.date_select( 18 :to_date, 19 use_month_numbers: true, 20 start_year: 2016, 21 end_year: (Time.now.year + 1), 22 default: Date.new(Time.now.year, Time.now.month, Time.now.day), 23 date_separator: '%s'), 24 '年 ', '月 ') + '日' %> 25 </div> 26 <div class="actions"> 27 <%= f.submit '適用' %> 28 </div> 29<% end %> 30 31<% @maildbs.each do |maildb| %> 32 <div class="maildbs-index-item"> 33 <div class="maildbs-right"> 34 <%= maildb.date %> 35 <%= maildb.time %> 36 <%= maildb.xxxx %> 37 <%= maildb.xxxx %> 38 </div> 39 </div> 40<% end %> 41 42<!-- 各ページへのリンク --> 43<%= will_paginate @maildbs %>

Ruby

1def update 2 3# この部分の書き方(モデルの条件での絞り方とルーティング)をご教示いただきたいのです 4 @maildbs = Maildb.paginate(page: params[:page], per_page: 10) 5 render 'user/XXXXXX' 6end

イメージ説明

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

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

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

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

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

guest

回答1

0

そもそもなんですが、updateメソッドを使う際は何かデータを変更する場合だと思います。
おそらく今回実装したいことって、検索での絞り込みだと思うので、そちらの流れを記述します。

controller

updateメソッドは削除していただいて構わないです。

def index @maildbs = Maildb.search(引数).paginate(page: params[:page], per_page: 10) end # Maildb.search_maildb(引数) → 検索機能のメソッド。 検索機能については以下にも記述したが、ransackとうgemを使用するか、modelに自前で検索機能を付け加える。 # indexメソッドである必要はありませんが、railsのレールに乗っ取って。。。

view

form_withを使用するのではなく、検索フォーム用にform_tagへと変更する。

form_withでも、form_forでも、form_tagでも実装できるっぽいです。
また、ransackを使用する場合は、search_form_forをしようする。
詳しくは、github

検索機能

ransackを使用する

github

qiita参考記事

自前の検索機能を実装する
qiita参考記事

投稿2017/08/29 22:22

Ryuto

総合スコア206

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

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

lyzmfeqpxs54

2017/08/30 12:53

ご回答ありがとうございます。ご教示いただいた方法でransackをbundle installし参考記事を見ながら @maildbs = Maildb.search(:time_cont => '12:00').paginate(page: params[:page], per_page: 10) と書き直してみたのですが、この文の部分で undefined method `paginate' for #<Ransack::Search:0x65ba7a8> エラーが出てしまいます。 何か間違っている点がございましたらご教示いただけると幸いです。
Ryuto

2017/08/30 18:07

@maildbs = Maildb.search(:time_cont => '12:00').result.paginate(page: params[:page], per_page: 10) にしてみてはいかがでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問