1

我理解我从 Rails 3.2.13 获得的这条错误消息的文字文本,但我不明白它背后的动机或清理它的最佳实践是什么。

弃用警告:在 Admin::AdminController 的“admin/admin”中找到布局,但父控制器将布局设置为“admin/admin”。请明确将您的布局设置为“admin/admin”或将其设置为 nil 以强制进行动态查找。

我在运行规范问题和答案时阅读了弃用警告,但答案提出了两种不同的解决方案,并且缺乏对这种能力的历史和未来的全面解释,足以指导我一般来说什么是对我来说最好的事情。

例如,我不清楚被弃用的是允许父控制器覆盖默认布局,还是被弃用的是允许默认布局覆盖父控制器中设置的内容。我也不明白改变行为的动机以及如何引导我改进我的应用程序的架构。

有人请告诉我。

4

1 回答 1

1

好的,所以我在 rails 源代码中找到了这条消息。事实证明,布局选项在 Rails 3.2.13 中是不可继承的(应该在较新版本的 rails 中修复)。这意味着子控制器将(出乎意料地)尝试动态地查找布局文件,即在布局控制器中与控制器同名的文件。

在您的情况下,它找到了一个“管理员/管理员”并使用此文件。这恰好与您在父控制器中指定的文件相同,但假设您在父控制器中指定了其他内容。在这种情况下,很高兴知道您在父控制器中指定的内容未在子控制器中使用。这就是它警告你的原因,因为这种行为将在未来的版本中改变。

因此,总而言之,“允许默认布局覆盖父控制器中设置的内容”将在未来版本中更改,您可以将布局设置为 bothniladmin/admin,两种解决方案都可以,但最后一个是 Rails将在未来的版本中,通过从父控制器继承。

希望这可以帮助。您可以在源代码中找到该消息:https ://github.com/rails/rails/blob/v3.2.14/actionpack/lib/abstract_controller/layouts.rb#L308-L328 。

于 2013-10-07T13:37:46.277 回答