actionview::template::error(nil:NilClass 的未定义方法 'html_safe')
actionview::template::error(undefined method 'html_safe' for nil:NilClass)
我是ruby的初学者,我想为redmine写一个插件。
我写了一个 运行 的插件,因为我在我的插件的控制器中使用了 'flash[:var]'。现在,当我想访问我的所有页面时,出现一条我不理解的错误消息。
Ruby 版本:ruby 1.9.3p484
Rails 版本:rails 3.2.19
this is the error message
感谢您的回答。
编辑:
this is the application_helper
您 运行 似乎遇到了在 flash
中具有 nil
值的情况。假设您有一个 flash
,如 { error: nil }
,然后您将在 content_tag
中调用 v.html_safe
- 这将导致错误。
您可能希望在调用 content_tag
:
之前从 flash
中提取所有 present?
的值
def render_flash_messages
flash.select { |k, v| v.present? }.map do |type, text|
content_tag(:div, text.html_safe, class: "flash #{type}", id: "flash_#{typ}")
end.join
end
您可以使用 .to_s
方法将 nil
转换为 string
问题
当您尝试在 nil
值上调用 .html_safe
时,它将抛出以下错误
NoMethodError: undefined method `html_safe' for nil:NilClass
例如
[8] project_rails » html_content = nil
=> nil
[9] project_rails » html_content.html_safe
NoMethodError: undefined method `html_safe' for nil:NilClass
from (pry):9:in `__pry__'
解决方案
您可以使用 .to_s
将 nil
转换为字符串
例如
[10] project_rails » html_content = nil
=> nil
[11] project_rails » html_content.to_s.html_safe
=> ""
[12] project_rails »
所以你的代码应该是这样的
def render_flash_messages
s = ''
flash.each do |k,v|
s << content_tag('div',v.to_s.html_safe, :class => "flash #{k}", :id => "flash_#{k}")
end
s.html_safe
end
问题是你将 nil
放入 flash 中,这是 Redmine 的 render_flash_messages
方法无法处理的。
改变处理 nil 值的方法是可行的,但不是你应该从 Redmine 插件做的事情。相反,请找出在您的插件中将 nil
放入闪存的位置和原因,而根本不这样做。
我是ruby的初学者,我想为redmine写一个插件。 我写了一个 运行 的插件,因为我在我的插件的控制器中使用了 'flash[:var]'。现在,当我想访问我的所有页面时,出现一条我不理解的错误消息。
Ruby 版本:ruby 1.9.3p484
Rails 版本:rails 3.2.19
this is the error message
感谢您的回答。
编辑:
this is the application_helper
您 运行 似乎遇到了在 flash
中具有 nil
值的情况。假设您有一个 flash
,如 { error: nil }
,然后您将在 content_tag
中调用 v.html_safe
- 这将导致错误。
您可能希望在调用 content_tag
:
flash
中提取所有 present?
的值
def render_flash_messages
flash.select { |k, v| v.present? }.map do |type, text|
content_tag(:div, text.html_safe, class: "flash #{type}", id: "flash_#{typ}")
end.join
end
您可以使用 .to_s
方法将 nil
转换为 string
问题
当您尝试在 nil
值上调用 .html_safe
时,它将抛出以下错误
NoMethodError: undefined method `html_safe' for nil:NilClass
例如
[8] project_rails » html_content = nil
=> nil
[9] project_rails » html_content.html_safe
NoMethodError: undefined method `html_safe' for nil:NilClass
from (pry):9:in `__pry__'
解决方案
您可以使用 .to_s
nil
转换为字符串
例如
[10] project_rails » html_content = nil
=> nil
[11] project_rails » html_content.to_s.html_safe
=> ""
[12] project_rails »
所以你的代码应该是这样的
def render_flash_messages
s = ''
flash.each do |k,v|
s << content_tag('div',v.to_s.html_safe, :class => "flash #{k}", :id => "flash_#{k}")
end
s.html_safe
end
问题是你将 nil
放入 flash 中,这是 Redmine 的 render_flash_messages
方法无法处理的。
改变处理 nil 值的方法是可行的,但不是你应该从 Redmine 插件做的事情。相反,请找出在您的插件中将 nil
放入闪存的位置和原因,而根本不这样做。