Rails has_many带别名

doc*_*nge 178 ruby-on-rails has-many

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

has_many :tasks
Run Code Online (Sandbox Code Playgroud)

在我的任务模型中:

belongs_to :user
Run Code Online (Sandbox Code Playgroud)

然后,假设外键'user_id'存储在tasks表中,我可以使用:

@user.tasks
Run Code Online (Sandbox Code Playgroud)

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

@user.jobs
Run Code Online (Sandbox Code Playgroud)

... 要么 ...

@user.foobars
Run Code Online (Sandbox Code Playgroud)

谢谢你的一堆.

Sam*_*ron 345

试一试:

has_many :jobs, foreign_key: "user_id", class_name: "Task"
Run Code Online (Sandbox Code Playgroud)

注意,这:as用于多态关联.

  • 这在Task方面是否需要特殊的东西,或者通常的"belongs_to"是否足够? (4认同)
  • 感谢您还包括外键 - 解决了我类似但不同的问题。 (2认同)

Pwn*_*rar 46

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

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

  has_many :tasks
end
Run Code Online (Sandbox Code Playgroud)

  • 请注意,“alias_attribute”调用必须出现在关联之前。 (2认同)

A. *_*rov 8

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

has_many :alias_name, through: model_name, source: initial_name
Run Code Online (Sandbox Code Playgroud)