在我的用户模型中,我可以:
has_many :tasks
并在我的任务模型中:
belongs_to :user
然后,假设外键'user_id'存储在tasks表中,我可以使用:
@user.tasks
我的问题是,如何声明has_many关系,以便我可以将用户的任务称为:
@user.jobs
......或......
@user.foobars
感谢一堆。
答案 0 :(得分:336)
答案 1 :(得分:41)
如果您仍希望能够将它们作为任务引用,也可以使用alias_attribute
:
class User < ActiveRecord::Base
alias_attribute :jobs, :tasks
has_many :tasks
end
答案 2 :(得分:3)
如果您通过has_many使用,并且想要别名:
+----------+--------+--------+
| name | version| count |
+----------+--------+--------+
| book | 1 | 2 |
| book | 2 | 1 |
| pen | 1 | 1 |
| pen | 2 | 3 |
| paper | 1 | 1 |
| paper | 2 | 0 |
+----------+--------+--------+
答案 3 :(得分:1)
完成@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
答案 4 :(得分:-57)
你可以用两种不同的方式做到这一点。一个是使用“as”
has_many :tasks, :as => :jobs
或
def jobs
self.tasks
end
显然第一个是处理它的最好方法。