TypeError: нет неявного преобразования nil в String. utils.rb:24:в `quote_ident'

Я сделал rake task.
Мое приложение rails работает без проблем.

Код

namespace :i18n_master do
  task check: :environment do
    read_model
    models = ActiveRecord::Base.descendants.map do |model|
      next if model.name.nil?
      model2hash(model)
    end

    p models
  end

  def model2hash(model)
    return Hash[model.name, model.column_names]
  end

  def read_model
    Dir[Rails.root.to_s + '/app/models/**/*.rb'].each do |file|
      begin
        require file
      rescue
      end
    end
  end
end

Ошибка

** Invoke i18n_master:check (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute i18n_master:check

rake aborted!
TypeError: no implicit conversion of nil into String
ror_app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql/utils.rb:24:in `quote_ident'
ror_app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql/utils.rb:24:in `quoted'
ror_app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql/quoting.rb:31:in `quote_table_name'
ror_app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql_adapter.rb:742:in `column_definitions'
ror_app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql/schema_statements.rb:186:in `columns'
ror_app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/schema_cache.rb:43:in `columns'
ror_app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/attributes.rb:93:in `columns'
ror_app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/model_schema.rb:260:in `column_names'
ror_app/lib/tasks/i18n_master.rake:13:in `model2hash'
ror_app/lib/tasks/i18n_master.rake:6:in `block (3 levels) in <top (required)>'
ror_app/lib/tasks/i18n_master.rake:4:in `map'
ror_app/lib/tasks/i18n_master.rake:4:in `block (2 levels) in <top (required)>'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rake/task.rb:240:in `call'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rake/task.rb:240:in `block in execute'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rake/task.rb:235:in `each'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rake/task.rb:235:in `execute'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rake/task.rb:179:in `block in invoke_with_call_chain'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rake/task.rb:172:in `invoke_with_call_chain'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rake/task.rb:165:in `invoke'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rake/application.rb:150:in `invoke_task'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rake/application.rb:106:in `block (2 levels) in top_level'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rake/application.rb:106:in `each'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rake/application.rb:106:in `block in top_level'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rake/application.rb:115:in `run_with_threads'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rake/application.rb:100:in `top_level'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rake/application.rb:78:in `block in run'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rake/application.rb:176:in `standard_exception_handling'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rake/application.rb:75:in `run'
/Users/shingonakanishi/.rvm/rubies/ruby-2.2.3/bin/rake:37:in `<main>'
Tasks: TOP => i18n_master:check

я прочитал это

Rails 4.0.0 - нет неявного преобразование nil в String

вышеперечисленные проблемы - это жемчужина для sqlite3.
поэтому я думаю, что моя проблема - это жемчужина для postgresql.

Но приложение My rails работает без проблем.
И я использую bundle.

% bundle pristine
Could not find command "pristine".

Почему

Почему TypeError: no implicit conversion of nil into String происходит в utils.rb:24:in quote_ident'

Как это исправить?


person shingo.nakanishi    schedule 12.09.2015    source источник
comment
пожалуйста, запустите задачу rake с опцией --trace   -  person Amit Sharma    schedule 12.09.2015
comment
ой. редактировать с ошибкой --trace.   -  person shingo.nakanishi    schedule 12.09.2015
comment
Я думаю проблема в этой строке Hash[model.name, model.column_names]   -  person Amit Sharma    schedule 12.09.2015


Ответы (1)


Я понял. Globalize::ActiveRecord::Translation#column_names возникает эта ошибка.
поэтому пропустите это.

namespace :i18n_master do
  task check: :environment do
    read_model
    models = ActiveRecord::Base.descendants.map do |model|
      next if model.name == 'Globalize::ActiveRecord::Translation'
      model2hash(model)
    end.compact

    p models
  end

  def model2hash(model)
    return Hash[model.name, model.column_names]
  end

  def read_model
    Dir[Rails.root.to_s + '/app/models/**/*.rb'].each do |file|
      begin
        require file
      rescue
      end
    end
  end
end
person shingo.nakanishi    schedule 12.09.2015