0

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

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方法添加记录到连接表?

提前致谢。

4

1 回答 1

0

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

 class User < ActiveRecord::Base
   has_many :tasks
 end

 class Task < ActiveRecord::Base
   belongs_to :user
 end

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

Active Record 的 create 方法更新数据库,但新方法只创建模型对象,如您在日志中看到的那样。

你需要在新建后调用保存

task = user.tasks.new 
user.save

这实际上将用户连同任务一起保存

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

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

于 2012-09-13T17:57:27.667 回答