该帖子是只是为了了解轨道是如何理解我的应用程序的过去版本,并保护它针对当前重大更改。
> 5.0 - 最近,我们从4.2+升级我们的应用程序。一个Rails所用Rails 5实现的变化是throw(:abort)
回调打破链使用before_*
的(如果有任何时候需要有)和使用false
会根本没有副作用(即没有回调链的时候会使用中止false
)(请大家注意这一点)
但这里一个陷阱。如果你读这this明确指出,如果从4.2 -> 5.0
升级return false
回调内部before_*
仍然是可行的。(有警告,但将工作)
所以这里的更新后,我的问题时,我有滑轨,AR和AS宝石5.0.0.1版本锁住了我的Gemfile.lock的,怎么做的Rails知道,我已经从4.2升级的应用程序,它有尊重在return false
声明它不会,如果你在创建的Rails 5.0新的应用程序,它的before_ *回调
源代码可能的链接也将有所帮助。
"throw(:abort)"
)CHANGELOG.md
文件;我引用(并回答你的问题):
Callbacks::CallbackChain.halt_and_display_warning_on_return_false
设置为true,将让应用程序支持返回false
停止回调链的过时的方式。
该值设置为false将告诉应用程序无视回调返回的任何false
值,并且仅在throw(:abort)
停止链。
该值也可以与Rails配置选项设置config.active_support.halt_callback_chains_on_return_false
。
当缺少配置选项,它的价值是true
,这么大年纪的应用程序移植到Rails 5.0将不会打破(但显示弃用警告)。对于新的Rails应用程序5.0,它的值设置在初始化到false
,所以这些应用程序将默认支持新的行为关于你提到的有关重大更改的关注,这是很好的记住:
铁轨似乎使用不同版本的“语义版本”的:
我从@rafaelfranca here引述如下:
X.Y.Z
ž - bug修正,没有发生API更改。
Ÿ - 新特性,可以含有API的变化。
X - 新功能,将包含API的变化。只是在碰到特殊的场合
我引述@ robin850 here
当Y被增加有可能是不建议使用的功能,但他们仍然可用,但是当它再次递增,这些功能可能不存在了(例如
Numeric#ago
在4.0可用,弃用在4.1和去除4.2)。
就个人而言,我使用标准“语义版本”,让开发了我的宝石
这就是为什么如果你做一个rails new some_project
,然后检查了Gemfile
,你会看到gem 'rails', '~> 5.2.2'
。因为如果是Rails的“语义版本”,它反而会看起来像gem 'rails', '~> 5.2'