0

コントローラーにこれらがあります:

class AccountsController < ApplicationController
 def index
  @search = Account.search(params[:search])
  @accounts = @search.order("id desc").includes(:chef).page(params[:pagina]).per(10)
 end
end

私の見解:

<%= f.text_field :username_or_email_or_chef_name_contains %>

正常に動作します!しかし、email に基づいて検索すると、次のエラーが発生しました。

ActiveRecord::StatementInvalid in Accounts#index 
Mysql2::Error: Column 'id' in order clause is ambiguous: SELECT  `accounts`.`id` AS t0_r0, `accounts`.`chef_id` AS t0_r1,...

アカウント コントローラーの.includes(:chef)を外すと、正常に動作します。

質問

なぜこのエラーですか?includeパフォーマンス上の理由から、アカウント コントローラーからを削除したくありません。

4

1 に答える 1

1

accounts テーブルと Chefs テーブルにはそれぞれid列があるため、MySQL はそれらの列のどれで順序付けを行うべきかを認識していません。order by 句でテーブル名を指定してみてください。

@accounts = @search.order("accounts.id desc").includes(:chef).page(params[:pagina]).per(10)
于 2012-06-04T21:22:29.883 に答える