209

在我的用户模型中,我可以:

has_many :tasks

在我的任务模型中:

belongs_to :user

然后,假设外键“user_id”存储在任务表中,我可以使用:

@user.tasks

我的问题是,如何声明 has_many 关系,以便我可以将用户的任务称为:

@user.jobs

... 或者 ...

@user.foobars

多谢了。

4

5 回答 5

402

试一试:

has_many :jobs, foreign_key: "user_id", class_name: "Task"

注意,它:as用于多态关联

于 2009-07-22T04:32:07.680 回答
72

alias_attribute如果您仍然希望能够将它们称为任务,也可以使用:

class User < ActiveRecord::Base
  alias_attribute :jobs, :tasks

  has_many :tasks
end
于 2016-08-03T22:08:30.597 回答
11

如果你通过 has_many 使用,并且想要别名:

has_many :alias_name, through: model_name, source: initial_name
于 2020-06-09T10:47:58.803 回答
4

要完成@SamSaffron 的回答:

您可以class_name使用foreign_keyinverse_of。我个人更喜欢更抽象的声明性,但这只是一个品味问题:

class BlogPost
  has_many :images, class_name: "BlogPostImage", inverse_of: :blog_post  
end

并且您需要确保您具有belongs_to子模型的属性:

class BlogPostImage
  belongs_to :blog_post
end
于 2019-06-14T15:18:12.747 回答
-65

你可以用两种不同的方式做到这一点。一种是使用“as”

has_many :tasks, :as => :jobs

或者

def jobs
     self.tasks
end

显然,第一个将是处理它的最佳方法。

于 2009-07-22T04:18:27.117 回答