在页面上呈现带有erb内容的字符串

时间:2016-08-29 09:08:25

标签: ruby-on-rails

我发现很多帖子都有这个问题,但似乎没有一个帖子可以解决我的问题。我得到了这个代码,我想从字符串中呈现:

<%= button_to "/admin/#{contr_name}/#{obj.id}", method: :delete, class: 'btn btn-danger btn-resource-destroy', data: {toggle: 'tooltip'}, title: 'Delete' do %>
   <%= icon('trash-o') %> <span class='sr-only'>Delete</span>
<% end %>

我试过这个:

template += "<div class='col-sm-4'>"
template += "<%= button_to \"/admin/#{contr_name}/#{obj.id}\", method: :delete, class: 'btn btn-danger btn-resource-destroy', data: {toggle: 'tooltip'}, title: 'Delete' do %>
   <%= icon('trash-o') %> <span class='sr-only'>Delete</span>
<% end %>"
template += "</div>"
ERB.new(template).result(binding)

但我得到语法错误。

我如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我建议改用偏见。

首先,定义部分,例如,views/shared/_delete_button.html.erb

<%= button_to "/admin/#{contr_name}/#{obj.id}", method: :delete, class: 'btn btn-danger btn-resource-destroy', data: {toggle: 'tooltip'}, title: 'Delete' do %>
   <%= icon('trash-o') %> <span class='sr-only'>Delete</span>
<% end %>

然后,您可以使用所需参数渲染部分:

render 'shared/delete_button', contr_name: [contr_name], obj: [obj]

[contr_name][obj]替换为您希望分配给这些变量的任何内容。

或者,更好的是,允许partial从预定义的变量中提取控制器的名称,如下所示:

<%= button_to "/admin/#{controller.controller_name}/#{obj.id}", method: :delete, class: 'btn btn-danger btn-resource-destroy', data: {toggle: 'tooltip'}, title: 'Delete' do %>
   <%= icon('trash-o') %> <span class='sr-only'>Delete</span> 
<% end %>

现在,您只需在呈现时提供obj

render 'shared/delete_button', obj: [obj]

您也可以使用命名路由,并执行[route_name]_path(obj)而不是手动构建路径。