2016-12-13 5 views
0

модели Пользователь должен иметь ассоциацию:Та же модель has_many и belongs_to к другой модели

has_many :owner_tasks, class_name: 'Task', foreign_key: 'user_id' 
has_many :doer_tasks, class_name: 'Task', foreign_key: 'doer_id' 

И модель задачи должна иметь ассоциацию:

belongs_to :owner, class_name: 'User', foreign_key: 'owner_id' 
has_many :doers, class_name: 'User', foreign_key: 'doer_id' 

Задача должна иметь много творящих, и только один владелец. Как право строить эту Ассоциацию?

ответ

2
class User 
    has_many :owned_tasks, class_name: 'Task', foreign_key: :owner_id 
    has_and_belongs_to_many :todo_tasks, class_name: 'Task' 
end 

class Task 
    belongs_to :owner, class_name: 'User', foreign_key: :owner_id 
    has_and_belongs_to_many :doers, class_name: 'User' 
end 

С помощью этой миграции (для Rails 5):

class RelateUsersToTasks < ActiveRecord::Migration[5.0] 
    def change 
    create_table :users 
    create_table :tasks do |t| 
     t.references :owner, index: true 
    end 
    create_join_table :tasks, :users do |t| 
     t.index :task_id 
     t.index :user_id 
    end 
    end 
end 

После миграции я полагаю, вы могли бы

user.owned_tasks # => [task1, task2, ...] 
user.todo_tasks # => [task1, task2, ...] 
task.owner # => user1 
task.doers # => [user1, user2, ...] 
+0

у меня есть ошибки, когда я пытаюсь создать объект задачи 'ActiveRecord: : StatementInvalid: PG :: UndefinedTable: ERROR: отношение "tasks_users" не существует' –

+0

@AlexandrDmitrenko Извините, я не пробовал. Новая версия должна работать. –

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