Dans mon modèle d'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 telle que je puisse faire référence aux tâches d'un utilisateur comme suit:
@user.jobs
... ou ...
@user.foobars
Merci beaucoup.
Donnez un coup de feu:
has_many :jobs, foreign_key: "user_id", class_name: "Task"
Notez que :as
est utilisé pour associations polymorphes .
Vous pouvez aussi utiliser alias_attribute
si vous souhaitez toujours pouvoir vous y référer également en tant que tâches:
class User < ActiveRecord::Base
alias_attribute :jobs, :tasks
has_many :tasks
end
Pour compléter la réponse de SamSaffron:
Vous pouvez utiliser class_name
soit foreign_key
ou inverse_of
. Personnellement, je préfère le déclaratif plus abstrait, mais ce n’est 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 le belongs_to
attribut sur le modèle enfant:
class BlogPostImage
belongs_to :blog_post
end