2016-02-12 5 views
1

Я новичок в рубине, и я хочу написать плагин для redmine. Я написал плагин, который работал, так как я использую «flash [: var]» в контроллере моего плагина. Теперь, когда я хочу получить доступ ко всем моим страницам, у меня есть сообщение об ошибке, которое я не понимаю.actionview :: template :: error (undefined method 'html_safe' для nil: NilClass)

Рубин Версия: рубин 1.9.3p484

Rails версии: рельсы 3.2.19

this is the error message The error message

спасибо за ваши ответы.

EDIT:

this is the application_helper

the application_helper

+0

Что входит в строку 306 помощника приложения? Можете ли вы опубликовать этот метод –

+0

Не могли бы вы написать текст в этих изображениях до вашего вопроса? Это будет держать StackOverflow согласованным и прозрачным для поисковых систем. – Paul

ответ

1

Похоже, вы столкнулись с ситуациями, в которых у вас есть nil значения в вашем flash. Представьте, что у вас есть flash, как { error: nil }, тогда вы должны позвонить v.html_safe в content_tag - что вызовет ошибку.

Вы можете извлечь все значения из 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 
+0

Спасибо большое, что вы решили мою проблему! благодаря – aganthie

2

Вы можете конвертировать nil в string используя .to_s метод

Проблема

Когда вы пытаетесь позвонить .html_safe по телефону nil значение он будет бросать следующую ошибку

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__' 

Решение

Вы можете преобразовать nil в строку, используя .to_s

Например

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

Проблема в том, что вы положили nil во флэш-память, которая является то, что метод Экспортировать в render_flash_messages не предназначен для обработки.

Изменение этого метода для обработки значений nil будет работать, но это не то, что вы должны сделать из плагина Redmine. Вместо этого выясните, где и почему в вашем плагине вы положили nil во флеш-память и просто не делаете этого.

 Смежные вопросы

  • Нет связанных вопросов^_^