Рельсы имеет много с именем псевдонима


в моей пользовательской модели я мог бы иметь:

has_many :tasks

и в моей модели задач:

belongs_to :user

тогда, предположив, что внешний ключ 'user_id' был сохранен в таблице задач, я мог бы использовать:

@user.tasks

мой вопрос в том, как я могу объявить отношение has_many таким образом, что я могу ссылаться на задачи пользователя как:

@user.jobs

... или. ..

@user.foobars

спасибо куче.

3 167

3 ответа:

дайте этому шанс:

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

отметим, что :as используется полиморфные ассоциации.

вы также можете использовать alias_attribute Если вы все еще хотите иметь возможность ссылаться на них как на задачи:

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

  has_many :tasks
end

вы могли бы сделать это двумя разными способами. Один из них с помощью "как"

has_many :tasks, :as => :jobs

или

def jobs
     self.tasks
end

очевидно, что первый будет лучшим способом справиться с этим.