J'ai les modèles suivants
class User
attr_accesible :first_name, :phone_number
has_one :user_extension
end
class UserExtension
attr_accessible :company, :user_id
belongs_to :user
end
J'ai une table qui contient tous les utilisateurs. Et je dois trier ce tableau par prénom, numéro de téléphone, société. Avec first_name, phone_number, je n'ai aucun problème, la commande fonctionne bien, par exemple
@users = User.order("first_name desc")
, mais j'ai aussi besoin de trier par entreprise et je ne sais pas comment le faire.
Et je peux obtenir le nom de l'entreprise de cette façon
@user.user_extension.company
J'ai donc des problèmes avec sql, ce qui me donnera tous les utilisateurs commandés par la société. DB: PostgreSQL. Merci.
Modifier:
Je devrais fournir plus d'informations sur ces modèles.
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
J'ai aussi essayé d'utiliser join
User.joins(:user_extension).order("user_extension.company desc")
et ce que je reçois
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
sur
User.includes(:user_extension).order("user_extension.company desc")
je reçois aussi
PG::Error: ERROR: relation "user_extensions" does not exist
Résolu J'ai des problèmes avec mon bd, toutes les jointures fonctionnent bien.
Essaye ça:
@users = User.includes(:user_extension).order("user_extensions.company desc")
Je pense que vous avez besoin de order
: user_extensions
, ne pas user_extension
La fusion peut rendre la requête plus petite/plus saine, et elle s'est comparée plus rapidement pour moi dans Rails 4.x:
@users = User.joins(:user_extension).merge(UserExtension.order(company: :desc))
@users = User.order("user_extension.company desc")
devrait fonctionner correctement.