Как передать имя метода form_for частичному в рельсах?

Добрый день! Маленький вопрос новичка: допустим, я хочу создать поля form_for помощника специального вида. Таким образом, чтобы не повторять сложный код, чтобы сгенерировать много полей модели, я отрисовываю некоторые частичные и передаю туда параметры. Есть ссылка на объект формы среди них.
Вопрос в том, что передать в метод визуализации для вызова частично необходимого метода объекта формы? Например, я хочу создать это время email_field:

<%= form_for @order do |f| %>
<%= render :partial => 'form_field_special', :locals => {:form => f, :type => :email_field, :labelcaption => "SpcName"} %>
<% end %>

и частичное само по себе:

<div class="control-group">
<%= f.label :name, <%= labelcaption %> , :class => "control-label" %>
<div class="controls">
<%= f.type :name %> # ??????
</div>
</div>

Спасибо вам, ребята!

2 ответа

Решение

Используйте силу рубина. Объект # отправить метод:

<%= form_for @order do |f| %>
  <%= render :partial => 'form_field_special', :locals => {..., :field_type => 'email_field'} %>
<% end %>

<%= f.send(field_type, :name) %>

Следующий метод оказался самым быстрым способом вызова функции объекта ruby ​​по его имени:

m = form.method(name_of_the_method)
m.call(parameters)
Другие вопросы по тегам