Ruby on rails 正在等待迁移;使用rails 4进行depot_g敏捷web开发

Ruby on rails 正在等待迁移;使用rails 4进行depot_g敏捷web开发,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我需要你的帮助。 我的RubyonRails教程(Rails4的敏捷web开发,BlockG)给了我一个错误。我是Ruby新手,不知道如何修复它 来源: class CombineItemsInCart < ActiveRecord::Migration def up Cart.all.each do |cart| # how many goods are in the cart? sums = cart.line_items.grou

我需要你的帮助。
我的RubyonRails教程(Rails4的敏捷web开发,BlockG)给了我一个错误。我是Ruby新手,不知道如何修复它

来源

class CombineItemsInCart < ActiveRecord::Migration
    def up

      Cart.all.each do |cart|
        # how many goods are in the cart?
        sums = cart.line_items.group(:product_id).sum(:quantity)
        sums.each do |product_id; quantity|
          if quantity > 1
            # remove lines
            cart.line_items.where(:product_id product_id).delete_all

            # replace with a one line
            item = cart.line_items.build(product_id: product_id)
            item.quantity = quantity
            item.save!
          end
       end
    end
  end
end
类组合ItemsInCart1
#拆线
购物车.行\u项目.其中(:产品\u id产品\u id).全部删除
#替换为一行
item=cart.line\u items.build(产品标识:产品标识)
item.quantity=数量
物品。保存!
终止
终止
终止
终止
终止
错误是:

正在等待迁移;运行“rake db:migrate RAILS_ENV=development”到 解决这个问题

但是当我试图运行rake db:migrate时,
我在终端中收到了这个错误:

rakedb:migraterails\u ENV=development

雷克流产了!合成错误: /home/yury/Desktop/rails/depot\g/db/migrate/20170401195439\u组合购物车中的物品。rb:10: 语法错误,意外的tIDENTIFIER,应为“')” 购物车.行\u项目.其中(:产品\u id产品\u id).全部删除 ^/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activesupport-4.0.0/lib/active\u support/dependencies.rb:228:in
require'
/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activesupport-4.0.0/lib/active\u support/dependencies.rb:228:in
require中的块' /home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activesupport-4.0.0/lib/active\u support/dependencies.rb:213:in
加载依赖项'
/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activesupport-4.0.0/lib/active\u support/dependencies.rb:228:in
require' /home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active\u record/migration.rb:718:in
load\u migration'
/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active\u record/migration.rb:714:in
migration' /home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active\u record/migration.rb:708:in
disable\u ddl\u transaction'
/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active\u record/migration.rb:1012:in
使用交易 /home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active\u record/migration.rb:1004:in
ddl\u事务'
/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active\u record/migration.rb:958:in
execute\u migration\u in\u transaction' /home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active\u record/migration.rb:920:in
block in migrate'
/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active\u record/migration.rb:916:in
each' /home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active\u record/migration.rb:916:in
migrate'
/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active\u record/migration.rb:764:in
up' /home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active\u record/migration.rb:742:in
migrate'
/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active\u record/railties/databases.rake:42:in
in' /home/yury/.rvm/gems/ruby-2.0.0-p648/gems/rake-12.0.0/exe/rake:27:in
'
/home/yury/.rvm/gems/ruby-2.0.0-p648/bin/ruby\u可执行文件挂钩:15:in
eval' /home/yury/.rvm/gems/ruby-2.0.0-p648/bin/ruby\u可执行文件挂钩:15:in `'Tasks:TOP=>db:migrate(通过使用 --跟踪)

系统:Ubuntu 16.04 64位。 我检查了几次代码,它与书中的代码相同

有谁能帮我说说我做错了什么?我怎样才能修好它? 谢谢

正如它所说的“
语法错误,意外的提示符,应为“')”
“然后,代码语法中有一个输入错误,并且在
总和中。每个
块,都要更改

sums.each do |product_id; quantity|
为了

在您的
if
语句中

cart.line_items.where(:product_id product_id)
对此

cart.line_items.where(product_id: product_id)
检查手册中的原始代码:

# rails40/depot_g/db/migrate/20121130000005_combine_items_in_cart.rb
def up
  # replace multiple items for a single product in a cart with a single item
  Cart.all.each do |cart|
    # count the number of each product in the cart
    sums = cart.line_items.group(:product_id).sum(:quantity)
    sums.each do |product_id, quantity|
      if quantity > 1
        # remove individual items
        cart.line_items.where(product_id: product_id).delete_all
        # replace with a single item
        item = cart.line_items.build(product_id: product_id)
        item.quantity = quantity
        item.save!
      end
    end
  end
end
# rails40/depot_g/db/migrate/20121130000005_combine_items_in_cart.rb
def up
  # replace multiple items for a single product in a cart with a single item
  Cart.all.each do |cart|
    # count the number of each product in the cart
    sums = cart.line_items.group(:product_id).sum(:quantity)
    sums.each do |product_id, quantity|
      if quantity > 1
        # remove individual items
        cart.line_items.where(product_id: product_id).delete_all
        # replace with a single item
        item = cart.line_items.build(product_id: product_id)
        item.quantity = quantity
        item.save!
      end
    end
  end
end