Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.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
Ruby on rails Rails db:migrate无法批量分配受保护的属性_Ruby On Rails_Ruby_Database_Rake_Dbmigrate - Fatal编程技术网

Ruby on rails Rails db:migrate无法批量分配受保护的属性

Ruby on rails Rails db:migrate无法批量分配受保护的属性,ruby-on-rails,ruby,database,rake,dbmigrate,Ruby On Rails,Ruby,Database,Rake,Dbmigrate,我正在通过《Rails第四版敏捷Web开发》一书学习Rails 给定以下迁移代码: class CombineItemsInCart < ActiveRecord::Migration def up Cart.all.each do |cart| sums = cart.line_items.group(:product_id).sum(:quantity) sums.each do |product_id, quantity| if

我正在通过《Rails第四版敏捷Web开发》一书学习Rails

给定以下迁移代码:

class CombineItemsInCart < ActiveRecord::Migration
  def up
    Cart.all.each do |cart|
      sums = cart.line_items.group(:product_id).sum(:quantity)

      sums.each do |product_id, quantity|
        if quantity > 1
          cart.line_items.where(product_id: product_id).delete_all
          cart.line_items.create(product_id: product_id, quantity: quantity)
        end
      end
    end
  end

  def down
    LineItem.where("quantity>1").each do |line_item|
      line_item.quantity.times do
        LineItem.create(cart_id: line_item.cart_id, product_id: line_item.product_id, quantity: 1)
      end
      line_item.destroy
    end
  end
end
现在我在某个地方读到,这本书是在默认情况下需要attr_accessible之前编写的,但它还没有真正涉及到如何正确使用它。我曾尝试在购物车模型中将:line_项目或:line_项目添加到我的attr_可访问行中,但没有成功


有人能告诉我这里发生了什么吗?

不能批量分配受保护的属性:数量

尝试访问属性:数量


您需要列出该列表中的所有属性。

您需要使属性可访问。在模型中:

class Object ActiveRecord::Base
  attrib_accessible :attrib1, :attrib2, :attrib3
end

显然,您将使用模型的属性替换attrib1等属性。

您尝试从移植中访问体量属性。如果要从代码中访问数据库表属性,则需要允许对该属性进行大量分配,以告知模型可以通过代码为字段分配数据。对于此用途,只需将所需字段添加为可访问的属性,对于您的问题,具体解决方案如下:

类LineItem 可访问属性:数量、产品id、购物车id


结束

这对我来说没有意义。我不知道您的型号名称,也不知道它的属性,所以我做了一个通用示例。基本上,这与您接受的答案是一样的。不过,问题在于LineItem模型。我照你的建议做了。我以为问题出在购物车模型上。谢谢你的帮助
class Object ActiveRecord::Base
  attrib_accessible :attrib1, :attrib2, :attrib3
end