在我的用户模型中,我可以:
has_many :tasks
在我的任务模型中:
belongs_to :user
然后,假设外键“user_id”存储在任务表中,我可以使用:
@user.tasks
我的问题是,如何声明 has_many 关系,以便我可以将用户的任务称为:
@user.jobs
... 或者 ...
@user.foobars
多谢了。
在我的用户模型中,我可以:
has_many :tasks
在我的任务模型中:
belongs_to :user
然后,假设外键“user_id”存储在任务表中,我可以使用:
@user.tasks
我的问题是,如何声明 has_many 关系,以便我可以将用户的任务称为:
@user.jobs
... 或者 ...
@user.foobars
多谢了。
alias_attribute
如果您仍然希望能够将它们称为任务,也可以使用:
class User < ActiveRecord::Base
alias_attribute :jobs, :tasks
has_many :tasks
end
如果你通过 has_many 使用,并且想要别名:
has_many :alias_name, through: model_name, source: initial_name
要完成@SamSaffron 的回答:
您可以class_name
使用foreign_key
或inverse_of
。我个人更喜欢更抽象的声明性,但这只是一个品味问题:
class BlogPost
has_many :images, class_name: "BlogPostImage", inverse_of: :blog_post
end
并且您需要确保您具有belongs_to
子模型的属性:
class BlogPostImage
belongs_to :blog_post
end
你可以用两种不同的方式做到这一点。一种是使用“as”
has_many :tasks, :as => :jobs
或者
def jobs
self.tasks
end
显然,第一个将是处理它的最佳方法。