2012-09-10 22 views
0
class Wall < ActiveRecord::Base 
    has_many :shelves 
end 

class Shelf < ActiveRecord::Base 
    has_many :book 
    belongs_to :wall 
end 

class Book < ActiveRecord::Base 
    belongs_to :shelf 
end 


CREATE TABLE `walls` (
`id` INT(11) NOT NULL AUTO_INCREMENT, 
`created_at` DATETIME NOT NULL, 
`updated_at` DATETIME NOT NULL, 
PRIMARY KEY (`id`) 
) 
CREATE TABLE `shelves` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `wall_id` INT(11) NULL DEFAULT NULL, 
    `created_at` DATETIME NOT NULL, 
    `updated_at` DATETIME NOT NULL, 
    PRIMARY KEY (`id`) 
) 
CREATE TABLE `books` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `shelf_id` INT(11) NULL DEFAULT NULL, 
    `created_at` DATETIME NOT NULL, 
    `updated_at` DATETIME NOT NULL, 
    PRIMARY KEY (`id`) 
) 

我想從一個貨架移動到另一個一本書,所以我寫的......更新1:N:在ActiveRecord的M相關聯

book.shelf = new_shelf 

但這並不照顧所有自動關聯。 當我查詢書架的舊書架時,它會返回我本應移動到另一書架上的書。

我錯過了什麼?

+1

在執行'book.shelf = new_shelf'之後你調用了保存嗎?如果在更新發生之前從前面的數據庫中拉出數據庫,則還必須調用前一個數據架上的重新裝入數據。 –

+0

@AnthonyAlberto我現在覺得自己很笨拙......是的,我錯過了保存/重新加載。謝謝!我想我正在等待ActiveRecord的某種心靈感應......想把它當成一個業者來得到一些業力? – Dan

+0

完成,謝謝:) –

回答

1

調用save做book.shelf = new_shelf

後,您還可以,如果它是從數據庫更新發生之前拉到稱前者貨架上重裝。