我在控制器中设置了一个具有特定属性的实例变量,例如
@post.errors
是否有任何方法可以在不知道关于@post
(或任何其他实例变量)的情况下检查视图:
a)是否有可用的实例变量?
b)如果上述情况属实,是否设置了属性errors
?
更新
如果上述问题返回true,则返回实例变量。
答案 0 :(得分:1)
这是检查当前作用域中的任何实例变量是否具有true
的{{1}}值的一种方法
errors
您可能需要修改第三行,具体取决于您通常使用error_somewhere = instance_variables.any? do |var_symbol|
var_value = instance_variable_get( var_symbol )
var_value.respond_to?( :errors ) ? var_value.errors : false
end
方法预期的数据(不清楚您的问题)。
您可能还想进一步修改此标识以识别错误变量(您可以使用errors
和map
或者可能写入哈希值)
例如,以下内容将构造变量名称及其值的哈希值,但仅填充具有返回true值的compact
方法的实例变量:
errors
如果在控制器内部运行,或者在these_have_errors = Hash[
instance_variables.map do |var_symbol|
var_value = instance_variable_get( var_symbol )
if var_value.respond_to?( :errors ) && var_value.errors
[ var_symbol, var_value ]
else
nil
end
end.compact
]
方法之前添加controller.
,则应获得如下结果:
instance_variables*
当@post存在且具有来自{ :@post => (value of @post) }
的真实返回值。
这里的重要方法可以让你自省完成任务:
答案 1 :(得分:1)
在您看来,您可以
controller.instance_variables
这将返回一个控制器类的所有实例变量的数组。
请注意,这将包含Rails初始化的变量,如
:@_routes, :@_action_has_layout, :@_headers
,以及您在action
答案 2 :(得分:0)
您可以使用try object
@post.try(:errors)