Rails控制台:重新加载!没有反映模型文件中的更改?可能是什么原因?


95

之前它工作正常。我一直在玩一些配置。所以可能是我在不知不觉中更改了一些配置。

这是环境/ 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'

这是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

当我运行重装!在Rails控制台上,它返回true

Answers:


181

reload!仅在控制台环境中重新加载最新代码。它不会重新初始化现有对象。

这意味着,如果您已实例化任何对象,则它们的属性将不会更新-包括新引入的验证。但是,如果创建一个新对象,则其属性(以及验证)将反映重新加载的代码。 这里更多


那么自定义验证呢?我已经定义了一些方法并向validate注册。当我更改验证逻辑时,它不会反映在重新加载!
Maddy.Shik 2011年

2
它会在您重新初始化对象时反映出来。
纳扎尔·侯赛因

19

您要从数据库中重新加载对象吗?

例如:

>> a = User.last
=> #<User id: 16, email: "asdfadsf@sdfdsf.com">
>> reload!
Reloading...
=> true

从数据库中重新加载模型之前,“ a”不会反映对模型的任何更改。


1
注意-即使在访问对象上的方法时也是如此。例如,如果您更改类方法foo()的定义,则在控制台中a.foo将不使用新定义,除非您首先重新加载a。
jpw
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.