Ответ 1
Сделайте снимок:
has_many :jobs, foreign_key: "user_id", class_name: "Task"
Обратите внимание, что :as
используется для полиморфных ассоциаций.
В моей модели User я мог бы:
has_many :tasks
и в моей модели задач:
belongs_to :user
Затем, предположив, что внешний ключ 'user_id' был сохранен в таблице задач, я мог бы использовать:
@user.tasks
Мой вопрос в том, как я могу объявить отношения has_many, чтобы я мог ссылаться на пользовательские задачи как:
@user.jobs
... или...
@user.foobars
Спасибо кучу.
Сделайте снимок:
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
Чтобы завершить ответ @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
Вы можете сделать это двумя разными способами. Один из них: "как"
has_many :tasks, :as => :jobs
или
def jobs
self.tasks
end
Очевидно, что первый из них был бы лучшим способом справиться с этим.