Ошибка миграции Rails - имя не может быть пустым

Я использую версию rails 2.x. Я использую базу данных mysql 5.0 для внутреннего процесса. Я столкнулся с ошибкой миграции, когда сделал следующие шаги.

  1. Получите код приложения с github.
  2. Схема запуска: процесс создания, загрузки и заполнения
  3. После этого добавьте данные в приложение.
  4. Снова вытащите код из той же ветки.
  5. После этого я запускаю db: migrate выдает следующую ошибку
-> rake db:migrate --trace
DEPRECATION WARNING: Rake tasks in vendor/plugins/acts_as_audited/tasks,

vendor / plugins / annotate_models / tasks, vendor / plugins / app_version / tasks, vendor / plugins / bullet / tasks, vendor / plugins / importer / tasks, vendor / plugins / mimetype-fu / tasks, vendor / plugins / railsdav / tasks,, vendor / plugins / rav / tasks, vendor / plugins / simple_captcha / tasks, vendor / plugins / smart_table / tasks, vendor / plugins / test_data_generator / tasks, vendor / plugins / visualize_models / tasks и vendor / plugins / xss_terminate / tasks устарели . Вместо этого используйте lib / tasks. (вызывается из /usr/lib/ruby/gems/1.8/gems/rails-2.3.12/lib/tasks/rails.rb:10)

** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environmentThu 11 Jul 2013 09:24:36 AM IST
** Execute db:migrate
==  ConvertOrganizationToAwesomeNestedSet: migrating ==========================
Running sample patched rebuild process.
rake aborted!
An error has occurred, all later migrations canceled:

Validation failed: Name can't be blank
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib/active_record/validations.rb:1102:in

save_without_dirty!' /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib/active_record/dirty.rb:87:in save_without_transactions! ' /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib/active_record/transactions.rb:200:в save!' /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib/active_record/connection_adapters/abstract/database_statements.rb:136:in transaction '/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12 /lib/active_record/transactions.rb:182:in transaction' /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib/active_record/transactions.rb:200:in save! ' /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib/active_record/transactions.rb:208:in rollback_active_record_state!' /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib/active_record/transactions.rb:200:in save! ' /opt/sample/lib/awesome_nested_set_overrides.rb:25:in rebuild!' /opt/sample/lib/awesome_nested_set_overrides.rb:22:incall '/opt/sample/lib/awesome_nested_set_overrides.rb:22:in rebuild!' /opt/ssample/lib/awesome_nested_set_overrides.rb:22:ineach' /opt/sample/lib/awesome_nested_set_overrides.rb:22:в rebuild!' /opt/sample/lib/awesome_nested_set_overrides.rb:32:in /sample/lib/awesome_nested_set_overrides.rb:32:in rebuild!' /opt/sample/lib/awesome_nested_set_overrides.rb:29:ineach '/opt/sample/lib/awesome_nested_set_overrides.rb:29:in rebuild!' ./db/migrate//20130102220216_convert_organization_to_awesome_nested_set.rb:6:in up_without_benchmarks' /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib /active_record/migration.rb:282:in send' /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib/active_record/migration.rb:282:in migrate '/usr/lib/ruby/1.8/benchmark.rb:293:in measure' /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib/active_record/migration.rb:282:in migrate' /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib /active_record/migration.rb:365: в __send__' /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib/active_record/migration.rb:365:in migrate '/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib/active_record/migration.rb:491: в migrate' /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib/active_record/migration.rb:567:in call' / usr / lib / ruby /gems/1.8/gems/activerecord-2.3.12/lib/active_record/migration.rb:567:in ddl_transaction' /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib/active_record/migration.rb:490:in migrate '/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib/active_record/migration .rb: 477: в each' /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib/active_record/migration.rb:477:in migrate '/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12 /lib/active_record/migration.rb:401:in up' /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.12/lib/active_record/migration.rb:383:in migrate '/usr/lib/ruby/gems/1.8/gems/rails-2.3.12/lib/tasks/databases.rake:112 / usr / lib / ruby ​​/ gems /1.8/gems/rake-10.0.3/lib/rake/task.rb:228:in call' /usr/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/task.rb:228:inexecute '/usr/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/task.rb : 223: в each' /usr/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/task.rb:223:inexecute '/usr/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/task.rb:166:in invoke_with_call_chain' /usr/lib/ruby/1.8/monitor.rb:242:insynchronize' /usr/lib/ruby/gems/1.8/gems /rake-10.0.3/lib/rake/task.rb:159:in invoke_with_call_chain' /usr/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/task.rb:152:ininvoke '/usr/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/application.rb:143:in invoke_task' /usr/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/application.rb:101:in top_level '/usr/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/application.rb:101:in each' /usr/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/application.rb:101:in top_level' /usr/lib/ruby/gems/1.8/gems/rake-10.0 .3 / lib / rake / application.rb: 110: в run_with_threads' /usr/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/application.rb:95:in top_level '/usr/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/application.rb:73: в run' /usr/lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/application.rb:160:in standard_exception_handling' / usr /lib/ruby/gems/1.8/gems/rake-10.0.3/lib/rake/application.rb:70:in run' /usr/lib/ruby/gems/1.8/gems/rake-10.0.3/bin/rake:33 /usr/bin/rake:19:inload '/ usr / bin / rake: 19 Задачи: TOP => db: migrate

Organization.rebuild! - это код, который вызывает плагин.

Похоже, что с плагином awesome_nested_set какая-то проблема. Я борюсь с этим в течение прошлой недели. Любые замечания будут оценены.

РЕДАКТИРОВАТЬ - 1

class ConvertOrganizationToAwesomeNestedSet < ActiveRecord::Migration
 def self.up   
 #  add_column :party, :lft, :integer
 #  add_column :party, :rgt, :integer
      Organization.reset_column_information
      Organization.rebuild!
  end
   def self.down
      remove_column :party, :lft
      remove_column :party, :rgt
  end
end

Модель - Организация

class Organization < Party
attr_accessible :name,
                   :parent_id   
 default_scope :order => 'name'   
 acts_as_nested_set has_many :children, :class_name => 'Organization',
 :foreign_key => "parent_id"  
  belongs_to :parent, :class_name =>'Organization', :foreign_key => "parent_id"  
  def display_name
     name  
   end

person Bathakarai    schedule 11.07.2013    source источник
comment
Не могли бы вы поделиться своим ConvertOrganizationToAwesomeNestedSet файлом миграции и Organization моделью?   -  person Talgat Medetbekov    schedule 11.07.2013
comment
@TalgatMedetbekov Обновил вопрос ..   -  person Bathakarai    schedule 11.07.2013


Ответы (2)


При миграции вы используете класс модели ActiveRecord. Короче: не надо.

Это может вызвать проблемы в долгосрочной перспективе. Если у вас есть миграция, в которой используется класс модели, а затем вы снова запустите ее, у вас возникнут проблемы, если кто-то изменит этот класс модели.

Миграции предназначены исключительно для настройки базы данных и должны быть построены таким образом, чтобы они всегда вели себя одинаково - независимо от текущего состояния кода вашего приложения.

Если вам действительно нужна миграция на модель ActiveRecord: определите этот класс внутри файла миграции. Таким образом, изменения в остальной части приложения будут неизменными.

person averell    schedule 11.07.2013

Поскольку вы получаете

Validation failed: Name can't be blank

у тебя должен быть

validates_presence_of :name

где-нибудь, либо в вашем классе, либо в плагине.

Возможно, у вас есть недопустимые записи в вашей базе данных, и когда вы перестраиваете !, они сохраняются (и проверяются), и вы получаете эту ошибку.

person sandro d.    schedule 15.04.2015