【发布时间】:2015-04-10 03:08:05
【问题描述】:
问题其实很简单。我想在我的应用程序中的每个控制器的 simple_form_for 标签之外显示错误通知。
我使用以下代码:
- if @user.errors.present?
.alert-box.alert{ data: { alert: true } }
%div= t('simple_form.error_notification.default_message')
这可以,但仅适用于具有@user 变量的控制器。我想知道是否有一些聪明的方法可以在不硬编码名称的情况下获取此类实例变量 (@user)。在每个控制器中它都不同,但它对应于当前控制器名称 @user for UsersController 等。
感谢您的帮助。不幸的是,我只能接受一个答案:)
可能的解决方案
我最终得到了辅助方法:
def errors_present?
# returns string like "UsersController" with support for name-spaced controllers
controller_name = controller.class.to_s.split('::').last
# extract out the "user" portion
prefix_name = controller_name.gsub(/controller/i, '').singularize.downcase
# is there a defined instance variable with this name?
i_var = controller.instance_variable_get(:"@#{prefix_name}")
return i_var.errors.present? if i_var != nil
false
end
并查看代码:
- if errors_present?
.alert-box.alert{ data: { alert: true } }
%div= t('simple_form.error_notification.default_message')
【问题讨论】:
标签: ruby-on-rails