2012-09-13 95 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