Rails:如何在link_to块中呈现HTML?

时间:2012-07-31 19:31:06

标签: ruby-on-rails ruby twitter-bootstrap

我正在使用rbates方法的嵌套表单:http://railscasts.com/episodes/196-nested-model-form-revised

我也在使用Twitter Bootstrap。

我正在尝试添加带有图标的Add Child按钮。因此,我修改了link_to_add_fields并将其重命名为icon_to_add_fields。这就是我的......

def icon_to_add_fields(name, f, association, icon_class = '', button_color = '')
  new_object = f.object.send(association).klass.new
  id = new_object.object_id
  fields = f.fields_for(association, new_object, child_index: id) do |builder|
    render(association.to_s.singularize + "_fields", f: builder)
  end
  link_to("#", class: "add_fields btn #{button_color}", data: {id: id, fields: fields.gsub("\n", "")}) do
    "<i class='icon-plus-sign icon-white'></i> #{name}"
  end
end

问题是,我的按钮不是将<i class="icon-plus-sign icon-white"></i> Add Child呈现为HTML,而是在其上方显示<i class="icon-plus-sign icon-white"></i> Add Child

所以,要“修复”这个问题,我会像这样添加simple_format ......

link_to("#", class: "add_fields btn #{button_color}", data: {id: id, fields: fields.gsub("\n", "")}) do
  simple_format "<i class='icon-plus-sign icon-white'></i> #{name}"
end

现在,链接中的HTML呈现得很好,BUUUT,里面有p个标签,我不想要。

我应该最终得到类似的东西:<a class="btn btn-primary" href="#"><i class="icon-plus-sign icon-white"></i> Add Child</a>

如何更正此功能以正确呈现HTML,但不输出p标签?

1 个答案:

答案 0 :(得分:1)

simple_format总是用<p>标记包装结果。但正如对这个问题Rails 3. simple_format do not wrap result in paragraph tags的回答所述,该方法只有9行,并且可以轻松覆盖,不会通过删除部分行来用<p>标记包装内容。
所以我相信你可以制作一个another_simple_format帮助器并在icon_to_add_fields方法上使用它,你就可以了。