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

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

ただいまの
回答率

90.61%

  • Ruby

    7339questions

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

  • Ruby on Rails

    6997questions

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

  • Ruby on Rails 4

    2406questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

kaminariを用いてページネーションを設定しようとしたところ、SyntaxエラーのSQLが発行

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,280

kaonach

score 4

いつもお世話になります。
railsアプリケーションの、MySQLからの検索結果
にkaminariでページネーションを設定しようとしたところ、
以下のようなSyntaxエラーのSQLが発行されてエラーになりました。

Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '                                                users.id,
              ' at line 1: SELECT COUNT(users.id,
                                        jobs.name) FROM users INNER JOIN jobs ON users.id = jobs.user_id

コントローラ側で二つのテーブル(UsersとJobs)を結合して配列を作成。
配列をKaminari.paginate_arrayで処理して変数(@hoge)に入れ、
ビュー側でpaginateを設定すると、エラーが発生しました。
ビューのpaginateをコメントアウトすると、
ページネーションのビューも消える代わりに、エラーは表示されなくなります。

おそらく、Kaminari内部で検索結果件数を取得する部分で本SQLが発行されている思いますが、
paginate_arrayを使用しているから、エラーになるのでしょうか。

kaminariはver 0.16.3
railsはver 4.1.1
です。
正しい設定方法や解決方法がわかる方、どうぞ宜しくお願いします。

コントローラ側
  def index
    @hoge = Kaminari.paginate_array(find).page(params[:page]).per(10)
  end
  def find
     return Users.joins(:job).select("users.id,
                                     jobs.name")
  end
ビュー側
<% @hoge do |hoge| %>
    <%= hoge.id %>
    <%= hoge.name %>
<% end %>
<%= paginate @hoge %>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

エラーの原因かどうかわかりませんが、

Kaminari.paginate_arrayに渡せるのは、ActiveRecord::Relationではなく、
Arrayではないでしょうか。
findメソッドで取得しているのは、ActiveRecord::Relationであるように思います。
Users.joins(:job).select("users.id,  jobs.name").to_a
などとして、Arrayを渡すようにしたらどうでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/13 00:00

    ありがとうございます。Arrayにしたところ解決しました。

    キャンセル

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    paginateによるページネーションに条件を付けたいのですがわかりません。

    現在下記のコードでユーザーの一覧表示のページネーションを実装しています。 @users = User.paginate(page: params[:page]) ここで、Use

  • 受付中

    Aptana Studio 3 ruby構文エラーの発生

    Aptana Studio 3で下記文を作成した所、"syntax error, unexpected tLABEL"という 構文エラーが2行目に表示されてしまいます。 clas

  • 受付中

    railsのページネーションについて

    ユーザー詳細ページにそのユーザーが投稿した記事をすべて表示させているのですが、gemのkaminariで記事表示を10件ごとにページネーションしようと思っているのですが、postの

  • 解決済

    RailsでJSONデータをページネーションしたい

    kaminariやwill_paginateはModelのデータを変数に入れてビューに入れるようですが、 API経由でデータをJSONで取得した場合、ページネーションする方法はな

  • 解決済

    ページネーションのカスタマイズ

    前提・実現したいこと モデルから特定のデータを取り出しページネーションを対応させたいです。 発生している問題・エラーメッセージ 以下のページネーションだと

  • 解決済

    データベースを複数ページに表示

    現在ページにデータベースを一覧にして単純にページに表示しています。日付のフォームは作り終え、以下の画像ような(データを20件ずつ区切りで表示できるようにする)表示をしたいと考えてい

  • 解決済

    MySQL ページネーション実装 LIMIT句のエラーについて

    前提・実現したいこと PHPとMySQLを用いて、ページネーションの実装をしています。 ページネーション(ページ切り替え)の実装方法いろいろ - Qiitaを参考にしてコードを書い

  • 受付中

    kaminariによるページネーション

    現在、rubyを用いた本棚アプリの書籍画面にrukaminariを用いてページネーションを実装しようとしているのですが、以下のようなエラーコードが吐き出され、成功しません。

同じタグがついた質問を見る

  • Ruby

    7339questions

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

  • Ruby on Rails

    6997questions

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

  • Ruby on Rails 4

    2406questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。