2012-09-13 68 views
0

我有一个问题,我希望有人能向我解释这一点。例如关系:ActiveRecord,多对多的双向关系

class User < ActiveRecord::Base 
    has_many :issues 
    has_many :tasks, through: :issues 
end 

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

class Task < ActiveRecord::Base 
    has_many :issues 
    has_many :users, through: :issues 
end 

我将尝试创建通过联想某些型号:

user = User.create 
task = user.tasks.new 
user.tasks # [#<Task id: nil, created_at: nil, updated_at: nil>] 
task.users # [] 

问题1.难道这打算是单向的关联还是我做错了什么?

user.tasks.new.save  
SQL (0.3ms) INSERT INTO "tasks" ("created_at", "updated_at") ... 

user.tasks.create  
SQL (0.4ms) INSERT INTO "tasks" ("created_at", "updated_at") .. 
SQL (0.4ms) INSERT INTO "issues" ("created_at", "task_id", "updated_at", "user_id") ... 

问题2:为什么只有创建方法添加记录才能连接表?

在此先感谢。

回答

0

您正在创建用户和任务之间的多对多关联。为了有单向联想,您需要编写

class User < ActiveRecord::Base 
    has_many :tasks 
end 

class Task < ActiveRecord::Base 
    belongs_to :user 
end 

这将创建用户和任务之间的一对多关联。

而且

创建活动记录的方法更新数据库,但新的方法只能创建模型对象,你可以用日志中看到。

需要调用保存后新

task = user.tasks.new 
user.save 

这实际上节省了用户与任务一起

此链接将解释你更多的协会

http://guides.rubyonrails.org/association_basics.html