簡體   English   中英

actionview :: template :: error(未定義的方法'html_safe'代表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

這是錯誤消息 錯誤消息

謝謝您的回答。

編輯:

這是application_helper

application_helper

您可以使用.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_snil轉換為字符串

例如

[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM