Dans mon modèle utilisateur, je pourrais avoir:
has_many :tasks
et dans mon modèle de tâche:
belongs_to :user
Ensuite, en supposant que la clé étrangère 'user_id' soit stockée dans la table des tâches, je pourrais utiliser:
@user.tasks
Ma question est la suivante: comment déclarer la relation has_many de sorte que je puisse faire référence aux tâches d'un utilisateur comme suit:
@user.jobs
... ou ...
@user.foobars
Merci beaucoup.
ruby-on-rails
has-many
docteurorange
la source
la source
Réponses:
Essayez ceci:
has_many :jobs, foreign_key: "user_id", class_name: "Task"
Notez que cela
:as
est utilisé pour les associations polymorphes .la source
belongs_to
suffisant?Vous pouvez également utiliser
alias_attribute
si vous souhaitez toujours pouvoir y faire référence en tant que tâches:class User < ActiveRecord::Base alias_attribute :jobs, :tasks has_many :tasks end
la source
Pour compléter la réponse de @ SamSaffron:
Vous pouvez utiliser
class_name
soit avecforeign_key
ouinverse_of
. Personnellement, je préfère le déclaratif plus abstrait, mais ce n'est vraiment qu'une question de goût:class BlogPost has_many :images, class_name: "BlogPostImage", inverse_of: :blog_post end
et vous devez vous assurer que vous avez l'
belongs_to
attribut sur le modèle enfant:class BlogPostImage belongs_to :blog_post end
la source
Si vous utilisez has_many through et souhaitez créer un alias:
has_many :alias_name, through: model_name, source: initial_name
la source
Vous pouvez le faire de deux manières différentes. La première consiste à utiliser "comme"
has_many :tasks, :as => :jobs
ou
def jobs self.tasks end
De toute évidence, le premier serait la meilleure façon de le gérer.
la source