2015-09-20 6 views
1

У меня есть простая настройка данных с моделью для пользователей и модель для задач. Между этими двумя моделями у меня есть два has_many: через ассоциации: стипендии и присвоения. В целом я хочу указать для задачи несколько последователей и нескольких правопреемников.Ruby: указать has_many: через ассоциацию, когда задано несколько has_many: через ассоциации

Теперь я хочу отобразить для конкретной задачи всех правопреемников и всех последователей. Если бы была только одна ассоциация, я просто мог бы сделать @ task.users. Поскольку у меня есть две ассоциации, я хочу указать, по какой ассоциации я хочу получить всех пользователей.

Смотрите мой код:

class User < ActiveRecord::Base 
    has_many :assignments 
    has_many :tasks, through: :assignments 

    has_many :fellowships 
    has_many :tasks, through: :fellowships 
end 

class Task < ActiveRecord::Base 
    has_many :assignments 
    has_many :users, through: :assignments 

    has_many :fellowships 
    has_many :users, through: :fellowships 
end 

class Assignment < ActiveRecord::Base 
     belongs_to :user 
     belongs_to :task 
end 

class Fellowship < ActiveRecord::Base 
     belongs_to :user 
     belongs_to :task 
end 

Давайте предположим, что у меня есть задача, как

@task = Task.first 

теперь я хочу, чтобы все правопреемников и всех последователей с чем-то вроде

@assignees = @ task.users "по присваиванию ассоциации"

@ follow-line = @ task.users "над asso (

но я не знаю, как это сделать.

Спасибо за помощь!

ответ

1

Вы можете написать следующим образом.

has_many: assignment_tasks, через:: задания, источник:: задача

has_many: fellowship_tasks через:: стипендии, источник:: задача

+0

Так что, если я добавить эти assigenment_tasks и fellowship_tasks в мои ассоциации моделей, могу ли я затем использовать '@assignees = @ task.assignment_users' и' @followers = @ task.fellowship_users'? – needgethelp

+0

Да, это должно сработать. – rakeshp

+0

Как насчет использования 'assignees' и' followers' вместо assign_tasks и fellowships_tasks. Таким образом, вы можете получить с помощью '@ task.followers' и' @ task.assignees'. – Anwar

Смежные вопросы