ruby - How to execute view code stored in string in run time with eval in rails 3.2 erb? -
what trying store chunk of erb code in string , execute code in run time. here test did :
1. take out chunk of code working erb file and, 2. rewrite erb file eval. here chunk of erb code taken out:
<tr> <th>#</th> <th><%= t('date') %></th> <th><%= t('project name') %></th> <th><%= t('task name') %></th> <th><%= t('log') %></th> <th><%= t('entered by') %></th> </tr> <% @logs.each |r| %> <tr> <td><%= r.id %></td> <td><%= (r.created_at + 8.hours).strftime("%y/%m/%d")%></td> <td><%= prt(r, 'task.project.name') %></td> <td><%= prt(r, 'task.task_template.task_definition.name') %></td> <td><%= prt(r, :log) %></td> <td><%= prt(r, 'last_updated_by.name') %></td> </tr> <% end %> t() translation method internationalization.
here erb file after rewriting:
<table class="table table-striped"> <% code = find_config_const('task_log_view', 'projectx')%> <%= eval(code)%> </table> before rewriting, chunk of code goes between <table>. variable code returns string of chunk of code , eval execute chunk of code. here error:
(eval):1: syntax error, unexpected '<' (eval):4: syntax error, unexpected tidentifier, expecting $end <th><%= t('project name') %></th> ^ extracted source (around line #6): 4: <table class="table table-striped"> 5: <% code = find_config_const('task_log_view', 'projectx')%> 6: <%= eval(code)%> 7: 8: </table> 9: what's wrong code above? help.
eval works evaluating ruby code.
irb(main):001:0> eval('puts "hello world"') hello world => nil while converting erb template should done erb class
irb(main):002:0> require 'erb' irb(main):003:0> erb.new('<%= "hello world" %>').result => "hello world" my guess code string contain erb template rather ruby code.
nonetheless don't think approach. task.project.name database possibly came user input. doing eval on seems not idea.
probably solve problem normal partials
Comments
Post a Comment