2016-08-29 64 views
0

我發現這個問題很多帖子,但它似乎沒有一個解決我的問題。我得到這個代碼,我想從字符串渲染:帶有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 %> 

我已經試過這樣:

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

請提供stacktrace以及一些信息,不僅僅是「我想渲染一個erb模板作爲字符串」。 – siegy22

+0

爲什麼你需要將它渲染爲一個字符串? – ollpu

+0

因爲我正在爲我擁有的所有索引頁面構建助手。 –

回答

0

我會建議使用partials來代替。

首先,定義局部的,例如,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]任何你想要的那些要分配給的變量。

,或者甚至更好,讓部分從預定義變量提取控制器的名稱,如:

<%= 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),而不是手動構建路徑。

+0

太棒了,我是這樣做的,它的工作原理,謝謝 –