Как передать имя метода 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)