私は次のモデルを持っています
class User
attr_accesible :first_name, :phone_number
has_one :user_extension
end
class UserExtension
attr_accessible :company, :user_id
belongs_to :user
end
すべてのユーザーを含むテーブルがあります。そして、この表をfirst_name、phone_number、companyでソートする必要があります。 first_name、phone_numberを使用すると、問題はありません。順序は正常に機能します。例
@users = User.order("first_name desc")
、会社ごとに並べ替える必要もあり、その方法がわかりません。
この方法で会社名を取得できます
@user.user_extension.company
だから私はSQLに問題があり、会社によって注文されたすべてのユーザーが私に与えられます。 DB:PostgreSQL。ありがとう。
編集:
このモデルに関する詳細情報を提供する必要があります。
create_table "user_extensions", :force => true do |t|
t.integer "user_id"
t.string "company"
end
create_table "users", :force => true do |t|
t.string "first_name"
t.string "phone_number"
end
また、結合を使用してみました
User.joins(:user_extension).order("user_extension.company desc")
そして私が得るもの
User Load (1.6ms) SELECT "users".* FROM "users" INNER JOIN "user_extensions" ON "user_extensions"."user_id" = "users"."id" ORDER BY user_extension.company desc
PG::Error: ERROR: relation "user_extensions" does not exist
に
User.includes(:user_extension).order("user_extension.company desc")
私も得る
PG::Error: ERROR: relation "user_extensions" does not exist
解決済み BDに問題があり、すべての結合が正常に機能します。
これを試して:
@users = User.includes(:user_extension).order("user_extensions.company desc")
order
:user_extensions
ではなくuser_extension
で必要だと思います
Mergeはクエリをより小さく/より見やすくすることができ、Rails 4.x:
@users = User.joins(:user_extension).merge(UserExtension.order(company: :desc))
@users = User.order("user_extension.company desc")
は正常に動作するはずです。