2017-03-06 3 views
0

form_for 태그를 문자열로 저장하는 FormQuestion 모델이 있습니다. 내가 좋아하는 뭔가를 찾고 있어요 다음문자열 값을 루비 메서드로 해석

<%= 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) 제안했다, 그러나 나는 찾고 있어요 안전한 대안

당신은으로 send 방법을 사용할 수 있습니다
+0

시도'<% = raw q.input %>' –

+0

@NoamHacker는 이미 그것을 시도했습니다. 아마도 단지'f.send (q.input)'이어야하는 문자열 – rohaldb

답변

0

:

<%= 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

을 출력합니다. 'send' 또한 private 메소드에 접근 할 수 있기 때문에'public_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 %>'이 아닌'<% f.send q.type, q.name %>' –