我发现很多帖子都有这个问题,但似乎没有一个帖子可以解决我的问题。我得到了这个代码,我想从字符串中呈现:
<%= 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)
但我得到语法错误。
我如何解决这个问题?
答案 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)
而不是手动构建路径。