Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在更新activerecord中的1:n:m关联_Activerecord_Associations - Fatal编程技术网

正在更新activerecord中的1:n:m关联

正在更新activerecord中的1:n:m关联,activerecord,associations,Activerecord,Associations,但这并没有自动处理所有的关联。 当我查询旧书架上的书时,它会返回我应该移到另一个书架上的书 我遗漏了什么?在执行book.shelf=new\u shelf 如果在更新之前已从数据库中取出旧工具架,则还必须在其上调用reload。执行book.shelf=new_shelf后是否调用save?如果在更新发生之前从数据库中取出了以前的工具架,您还必须调用重新加载。@AnthonyAlberto我现在感觉更笨了。。。是的,我错过了保存/重新加载。谢谢我想我期待着从ActiveRecord获得某种心灵

但这并没有自动处理所有的关联。 当我查询旧书架上的书时,它会返回我应该移到另一个书架上的书


我遗漏了什么?

在执行
book.shelf=new\u shelf


如果在更新之前已从数据库中取出旧工具架,则还必须在其上调用reload。

执行
book.shelf=new_shelf
后是否调用save?如果在更新发生之前从数据库中取出了以前的工具架,您还必须调用重新加载。@AnthonyAlberto我现在感觉更笨了。。。是的,我错过了保存/重新加载。谢谢我想我期待着从ActiveRecord获得某种心灵感应。。。想把它作为一个答案来得到一些业力吗?
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`)
)
  book.shelf = new_shelf