Console Rails: recarregar! não reflete as mudanças nos arquivos do modelo? Qual poderia ser a razão possível?

95

Anteriormente, estava funcionando bem. Tenho jogado um pouco config. Talvez eu tenha alterado algumas configurações sem saber.

aqui está a configuração de environment / development.rb

  config.cache_classes = false

  # Log error messages when you accidentally call methods on nil.
  config.whiny_nils = true

  # Show full error reports and disable caching
  config.consider_all_requests_local       = true
  config.action_view.debug_rjs             = true
  config.action_controller.perform_caching = false

  # Don't care if the mailer can't send
  config.action_mailer.raise_delivery_errors = false

  # Print deprecation notices to the Rails logger
  config.active_support.deprecation = :log

  # Only use best-standards-support built into browsers
  config.action_dispatch.best_standards_support = :builtin

  # migration prefix with sequence #s
  config.active_record.timestamped_migrations = false

  #time zone
  config.time_zone = 'UTC'

Aqui está a seção de configuração de application.rb

 # Configure the default encoding used in templates for Ruby 1.9.
 config.encoding = "utf-8"

 # Configure sensitive parameters which will be filtered from the log file.
 config.filter_parameters += [:password]

 config.active_record.schema_format = :sql

quando eu executo o reload! no console Rails ele retorna verdadeiro

Maddy.Shik
fonte

Respostas:

181

reload!apenas recarrega o código mais recente no ambiente do console. Ele não reinicializa objetos existentes.

Isso significa que se você já tiver instanciado algum objeto, seus atributos não serão atualizados - incluindo validações recém-introduzidas. No entanto, se você criar um novo objeto, seus atributos (e também as validações) refletirão o código recarregado. mais aqui

Nazar Hussain
fonte
E quanto à validação personalizada? Eu defini alguns métodos e registrei com validate. Quando eu mudo a lógica de validação, não se reflete no recarregamento !.
Maddy.Shik,
2
Ele refletirá quando você reinicializar o objeto.
Nazar Hussain
19

Você está recarregando o objeto do banco de dados?

Por exemplo:

>> a = User.last
=> #<User id: 16, email: "[email protected]">
>> reload!
Reloading...
=> true

'a' não refletirá nenhuma mudança em seu modelo até que você o recarregue a partir do banco de dados.

maré
fonte
1
Nota - isso é verdadeiro mesmo ao acessar um método em um objeto. Por exemplo, se você alterar a definição do método de classe foo (), no console a.foo não usará a nova definição, a menos que primeiro recarregue a.
jpw