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

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

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

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

Ruby on Rails

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

Q&A

1回答

1366閲覧

Mysqlで作成したデータベースをページングして表示する

lyzmfeqpxs54

総合スコア237

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2017/09/08 05:32

編集2017/09/10 04:17

いつもお世話になります。
現状Railsでgenerateしたモデルをwill_paginateを使用して10ページずつ表示させることには成功している状態です。

RailsでgenerateしたモデルではなくMysqlで作成したデータベースからデータを取り込みwill_paginateを使用してページングしたいと考えているのですが下記のようなエラーが出てしまいます。

undefined method `paginate' for #Mysql::Result:XXXXXXXXXXX

質問なのですが、will_paginateはRailsで作成したモデルにしか対応していないということでしょうか。will_paginateで表示できない場合、Mysqlのデータをページングして表示する場合どのようにすればよいのでしょうか。

ご教示いただければ幸いです。
よろしくお願いいたします。

追記

配列であるMysqlのデータをページングする場合require 'will_paginate/array'を追加すればそのまま動かせるという記事があったので行ってみたのですが
<%= will_paginate @maildbs %>
部分で
undefined method `total_pages' for #Mysql::Result:xxxxxxxxxxxxxxxxx
エラーが出てしまいます。

Ruby

1#user_controller.rb 2 3# Maildbモデルを10ずつ表示 4@maildbs = Maildb.paginate(page: params[:page], per_page: 10) 5↑ これは通常通りできる 6 7#personal.html.erb 8<%= will_paginate @maildbs %> 9 10 11 12 13 14#user_controller.rb 15 16# Mysqlに接続 17client = Mysql.connect('localhost', 'root', 'パスワード', 'データベース名') 18# Maildbモデルを10ずつ表示 19@maildbs = client.query("SELECT * FROM テーブル名").paginate(page: params[:page], per_page: 10) 20↑ このような形だとエラー 21「client.query("SELECT * FROM テーブル名")」でデータ自体はきちんと取れています 22 23#personal.html.erb 24<%= will_paginate @maildbs %> 25 26 27 28

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

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

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

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

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

guest

回答1

0

基本的な質問ですがORM(オブジェクト関係マッピング)の仕組みは理解されていますでしょうか?
Maildbのモデルクラスは存在しますか?

will_paginateのgemの中身は見てないですが、Modelクラスの挙動を変えているため、Modelクラスをラップした処理が内部で行われていると想像できます

RailsからアクセスできないDBの場合はModelにマッピングができないため、will_paginateのgemではページネーションが実現できないのではないでしょうか?

  1. gemを使わずに自力で実現する
  2. mysqlからテーブルを取得してコピー&Modelを作成する
  3. DBを作成しないModelを作成してModelとして扱えるように処理する

などであれば実現できると思います。

投稿2017/09/21 11:07

mtdsnsk

総合スコア789

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問