2017-03-06 16 views
0

我有一個FormQuestion模型,它將form_for標記存儲爲字符串。 我期待有類似以下內容:將字符串值解釋爲ruby方法

<%= 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標記,而不是簡單地打印爲頁面上的文本?

編輯: eval(q.input)建議,但是我正在尋找一個更安全的替代

+0

嘗試'<%= raw q.input%>' –

+0

@NoamHacker已經試過了。它只是打印應該是'f.send(q.input)'的字符串 – rohaldb

回答

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

。也可以嘗試'public_send'作爲'send'也可以訪問私有方法。 – jvnill

+0

@jvnill是的,我更新了我的答案。 –

+0

但是,這還不是一個完整的答案,因爲上面指出的@mu太短了。如果'q.input'是一個數組,那麼應該是'f.send(* q.input)'。 – jvnill

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 %> 
+0

當使用f.send我得到錯誤: ''未定義的方法':text_field'爲# 您的意思是? text_field「。 ':name'出現同樣的錯誤。如果我刪除冒號,則頁面上不會顯示任何內容。 – rohaldb

+0

雖然可以使用字符串('text_field'),但我打算使用符號i..e,':text_field'。換句話說,以下內容大致相同。 '<%= f.text_field:name%>','<%= f.send:text_field:name%>','<%= f.send'text_field','name'%>' –

+0

我看到我也是應該寫成<%= f.send q.type,q.name%>'not'<%f.send q.type,q.name%>' –