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

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 through,并且想要别名:

has_many :alias_name, through: :model_name, source: :initial_name

(谢谢你的更正,萨米·伯恩鲍姆)

试试这个吧:

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

注意:as用于多态关联。

还有has_many的foreign_key选项。

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

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

  has_many :tasks
end

完成@SamSaffron的回答:

你可以用foreign_key或者inverse_of来使用class_name。我个人更喜欢更抽象的陈述句,但这真的只是一个品味问题:

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

你需要确保你在子模型上有belongs_to属性:

class BlogPostImage
  belongs_to :blog_post
end