ActiveRecord,多对多的双向关系

时间:2012-09-13 17:34:22

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个问题,希望有人可以向我解释。示例关系:

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:为什么只有create方法为连接表添加记录?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您正在创建用户和任务之间的多对多关联。为了有一种方式关联,你需要写

 class User < ActiveRecord::Base
   has_many :tasks
 end

 class Task < ActiveRecord::Base
   belongs_to :user
 end

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

并且

创建Active Record的方法更新数据库,但新方法只创建模型对象,如日志所示。

你需要在新的

之后调用save
task = user.tasks.new 
user.save

这实际上会将用户与任务一起保存

此链接将向您解释有关关联的更多信息

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