![](/img/trans.png)
[英]ActionView::Template::Error: undefined method `<' for nil:NilClass
[英]actionview::template::error(undefined method 'html_safe' for nil:NilClass)
我是紅寶石的初學者,我想為redmine寫一個插件。 我寫了一個運行的插件,因為我在我的插件的控制器中使用'flash [:var]'。 現在當我想訪問我的所有頁面時,我收到一條我不理解的錯誤消息。
Ruby版本:ruby 1.9.3p484
Rails版本:rails 3.2.19
謝謝您的回答。
編輯:
您可以使用.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
您似乎遇到了flash
nil
值的情況。 想象一下你有一個類似{ error: nil }
的flash
,然后你會在content_tag
調用v.html_safe
- 這將導致錯誤。
您可能想要從flash
中提取所有值present?
,在調用content_tag
之前:
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
問題是你把nil
放入flash中,這是Redmine的render_flash_messages
方法不能處理的東西。
更改該方法以處理nil值將起作用,但您不應該從Redmine插件中執行此操作。 相反,找出你的插件在哪里以及為什么你把nil
放入閃存並且根本不這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.