2010-09-16 3 views
1

У меня возникла большая проблема при перемещении моего приложения в Rails 3. У меня есть помощник вида, который я называю «WidgetHelper». Это помогает сделать некоторые частичные автоматически, когда я обращаюсь к нему. Например,Rails 3 widget helper partial

<%= widget('loginbox', :global => true) %> 

Но он не работает правильно. Он отображает HTML-код так, как я хочу, но избегает возвращаемого значения, чего не ожидается. Как я могу показать (или что-то) значение не избежать возвращаемого значения для меня?

Вот мой код:

def widget(widget, options={}) 
    begin 
     unless options[:fullpath] 
     render :partial => widget_path(widget, options[:global]) 
     else 
     render "widgets/#{widget}" 
     end 
    rescue ActionView::MissingTemplate 
     "<!-- widget: #{widget.inspect}, #{options.inspect} -->" 
    end 
    end 

ответ

3
def widget(widget, options={}) 
    begin 
    unless options[:fullpath] 
     raw render(:partial => widget_path(widget, options[:global])) 
    else 
     raw render("widgets/#{widget}")) 
    end 
    rescue ActionView::MissingTemplate 
    raw "<!-- widget: #{widget.inspect}, #{options.inspect} -->" 
    end 
end 

Метод Rails 3 raw делает реверс h метода в Rails 2. Экранирование строка была выполняется с помощью метода h на Rails 2. В Rails 3 строки, выводимые из представления, экранируются по умолчанию, а экранирование может быть отключено с помощью th e raw способ.

+0

Спасибо, это хорошо работает. Я добавляю счет для вас и для @Jamie Wong тоже, потому что я использовал оба решения в своем приложении. –

+0

Это кажется отчасти в моем сознании - когда вы когда-нибудь захотите виджет без сырых? Указание на то, что необработанное должно быть частью определения в моем сознании, а не вызовом. –

+0

Ты прав Джейми. Исправьте. – edgerunner

1

Rails 3 изменил способ, что фильтрация контента работает - это по умолчанию предполагает, что вы хотите, чтобы все фильтруется.

Вы можете исправить это с помощью html_safe:

"<!-- widget: #{widget.inspect}, #{options.inspect} -->".html_safe

См: http://asciicasts.com/episodes/204-xss-protection-in-rails-3