如何在从Rails 2升级到Rails 3之后修复HTML的转义

时间:2014-05-08 06:19:24

标签: javascript ruby-on-rails ruby-on-rails-3 escaping

我有一个使用rails 2.3.8的rails应用程序。我打算将它升级到3.0.10。为此,我使用了rails_upgrade gem来更改配置文件。但是在升级到更新的版本后,我可以看到整个布局搞砸了并且html被转义了。例如,我看到& lt而不是<和& gt而不是> 。最初我怀疑较旧的haml gem是逃避html的原因。但是我更改了Gem文件以获得最新的haml gem。我正在使用haml 4.0.5。我错过了什么。这让我很生气。任何帮助表示赞赏。这是因为不兼容的宝石或某些配置搞砸了吗? 视图代码粘贴在此处。

%table.grid.full
  %tr
    %td.grid.full_panels
      -table_panel "Project Listing" do
        %table.treetable_trigger
          %thead
            %tr 
              %th Name
              %th priority
              -Project::PLATFORM_OPTIONS.each do |platform_name,platform|
                %th=platform_name
              %th ICs 
          %tbody
            - for project in @projects
              %tr{:class => cycle(:odd, :even), :id => dom_id(project)}
                -if project.prj_disabled? #if project is disabled add color to title and disabled notification
                  %td.nowrap.body_only_tooltip_trigger{:title => project.description+ " <pre><strong>CURRENTLY DISABLED</strong></pre>"}= link_to project.name, project, {:style=>'color:#FF0000;'}
                -else
                  %td.nowrap.body_only_tooltip_trigger{:title => project.description}= link_to project.name, project
                -if project.priority == 28
                  - proj_priority = "Low"
                -elsif project.priority == 4
                  - proj_priority = "Medium"
                -else
                  - proj_priority = "High"    
                %td= proj_priority
                -for platform in Project::PLATFORMS
                  %td= project.send(platform) ? 'Enabled' : 'Disabled'
                %td= pluralize project.exclusions_count, "Exclusion"

=javascript_include_tag 'pages/project_index.min.js'

创建网格面板时,html会被转义。

2 个答案:

答案 0 :(得分:1)

您正在此行中嵌入HTML标记(pre和strong)。

%td.nowrap.body_only_tooltip_trigger{:title => project.description+ " <pre><strong>CURRENTLY DISABLED</strong></pre>"}= link_to project.name, project, {:style=>'color:#FF0000;'}

只需将.html_safe添加到包含HTML的字符串片段中。

%td.nowrap.body_only_tooltip_trigger{:title => project.description+ " <pre><strong>CURRENTLY DISABLED</strong></pre>".html_safe}= link_to project.name, project, {:style=>'color:#FF0000;'}

答案 1 :(得分:0)

我想我能够打破这种局面。我不知道html_safe无法正常工作的原因,我用hel_concat替换helper中的concat。 Rails 3不应与concat一起使用。 它将导致javascript的转义。