我理解我从Rails 3.2.13获得的此错误消息的文字文本,但我不明白它背后的动机或清理它的最佳做法是什么。
DEPRECATION WARNING:在Admin :: AdminController的“admin / admin”中找到布局,但父控制器将布局设置为“admin / admin”。请明确将您的布局设置为“admin / admin”或将其设置为nil以强制进行动态查找。
我阅读了deprecation warnings when running specs问题和答案,但答案提出了两种不同的解决方案,并且缺乏对此历史的充分解释以及此功能的未来,足以指导我对我做什么是最好的事情。一般
例如,我不清楚是否允许父控制器覆盖默认布局或者不推荐使用的是允许默认布局覆盖父控制器中设置的内容。我也不明白改变行为的动机以及如何指导我改进应用程序的架构。
有人请告诉我。
答案 0 :(得分:1)
好的,所以我在rails源代码中找到了这条消息。事实证明,布局选项在Rails 3.2.13中是不可继承的(应该在较新版本的rails中修复)。这意味着子控制器会(意外地)尝试在布局控制器中动态查找布局文件,即与控制器同名的文件。
在您的情况下,它找到一个“admin / admin”并使用此文件。这恰好是您在父控制器中指定的文件,但是假设您已在父控制器中指定了其他内容。在这种情况下,很高兴知道您在父控制器中指定的内容未在子控制器中使用。这就是为什么它会警告你,因为这种行为将在未来的版本中发生变化。
总而言之,“允许默认布局覆盖父控制器中设置的内容”将在未来版本中进行更改,您可以将布局设置为nil
或admin/admin
,这两个解决方案都没问题,但最后一个是Rails将来会从父控制器继承的。
希望这会有所帮助。您可以在源代码中找到此消息:https://github.com/rails/rails/blob/v3.2.14/actionpack/lib/abstract_controller/layouts.rb#L308-L328。