将字符串值解释为ruby方法

时间:2017-03-06 03:34:22

标签: ruby-on-rails ruby forms form-for

我有一个FormQuestion模型,它将form_for标记存储为字符串。 我希望得到以下内容:

<%= form_for(application_form) do |f| %>
  <% FormQuestion.all.each do |q| %>
    <%= q.input %>  #where q.input = "f.text_field :name"
  <% end %>
<% end %>

如何从q.input返回的字符串被解释为form_for ruby​​标记,而不是简单地在页面上作为文本打印?

编辑: 建议eval(q.input),但我正在寻找更安全的替代方案

2 个答案:

答案 0 :(得分:0)

您可以使用send方法:

<%= form_for(application_form) do |f| %>
  <% FormQuestion.all.each do |q| %>
    <%= f.send(q.input) %>  #where q.input = "f.text_field :name"
  <% end %>
<% end %>

答案 1 :(得分:0)

我会将此更改为:

<%= form_for(application_form) do |f| %>
  <% FormQuestion.all.each do |q| %>
    <% f.send q.type, q.name %>  #where q.type = :text_field and q.name = :name
   <% end %>
<% end %>

否则:

<%= form_for(application_form) do |f| %>
  <% FormQuestion.all.each do |q| %>
    <%= raw q.as_html %>  # where q.as_html = "<input name="name"></input>"
  <% end %>
<% end %>