Миграции находятся на рассмотрении; depot_g гибкая веб-разработка с рельсами 4

Мне нужна ваша помощь.
Мой учебник Ruby on Rails (гибкая веб-разработка с рельсами 4, блок g) дает мне ошибку. Я новичок в 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

Ошибка:

Миграции находятся на рассмотрении; run 'rake db: migrate RAILS_ENV = development' для решения этой проблемы.

Но когда я попытался запустить rake db: migrate,
Я получаю эту ошибку в терминале:

rake db: migrate RAILS_ENV = разработка

грабли прерваны! SyntaxError: /home/yury/Desktop/rails/depot_g/db/migrate/20170401195439_combine_items_in_cart.rb:10: синтаксическая ошибка, неожиданный tIDENTIFIER, ожидающий ')' cart.line_items.where(: product_id product_id).delete_all ^/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:28:in require'/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:228:in блоке require '/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activesupport-4.0. 0/lib/active_support/dependencies.rb: 213: in load_dependency'/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:228:in require '/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active_record/migration.rb:718:in load_migration'/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active_record/migration.rb:714:in migration '/home/yury/.rvm/gems/ruby-2.0.0-p648/драгоценные камни /ActiveRecord-4.0.0/Library/active_record/migration.rb: 70 8: in disable_ddl_transaction'/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active_record/migration.rb:1012:in use_transaction?' /home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active_record/migration.rb:1004:in ddl_transaction'/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active_record/migration.rb:958:in execute_migration_in_transaction '/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord- 4.0.0/lib/active_record/migration.rb: 920: в block in migrate'/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active_record/migration.rb:916:in каждом '/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active_record/migration.rb:916:in migrate'/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active_record/migration.rb:764:in up '/home/yury/.rvm/gems/ruby-2.0. 0-p648/gems/activerecord-4.0.0/lib/active_record/migration.rb: 742: in migrate'/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/activerecord-4.0.0/lib/active_record/railties/databases.rake:42:in block (2 уровня) в '/home/yury/.rvm/gems/ruby-2.0.0-p648/gems/rake-12.0.0/exe/rake: 27: in <top (required)>'/home/yury/.rvm/gems/ruby-2.0.0-p648/bin/ruby_executable_hooks:15:in <top (required)>'/home/yury/.rvm/gems/ruby-2.0.0-p648/bin/ruby_executable_hooks:15:in eval'/home/yury/.rvm/gems/ruby-2.0.0-p648/bin/ruby_executable_hooks: 15: in '' Задачи: TOP => db: migrate (см. полный след, запустив задачу с помощью --trace)

Система: Ubuntu 16.04 64 бит. Я проверил код несколько раз, и это то же самое, что и в книге.

Так может ли кто-нибудь помочь мне и сказать, что я делаю неправильно? И как я могу это исправить? Благодарю!

-2
источник поделиться
1 ответ

Поскольку он говорит " syntax error, unexpected tIDENTIFIER, expecting ')' тогда появляется опечатка в синтаксисе кода и находится в вашем блоке sums.each, измените

sums.each do |product_id; quantity|

Для

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
0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос