2016-12-13 97 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:错误:关系“tasks_users”不存在' –

+0

@AlexandrDmitrenko对不起,我没有尝试。新版本应该可以工作。 –

相关问题