Я пытаюсь высушить кучу кода форм с повторяющимся набором полей, появляющихся в конце каждой формы. Я написал хелпер, который работает с хелпером form_for rails. Но я начинаю теряться во всех различных прицелах, которые летают вокруг...
Мой помощник выглядит примерно так:
def simple_form_helper(record_or_name_or_array, *args, &proc)
options = ... # overriding some options, not relevant
form_for(record_or_name_or_array, *(args << options.merge(:option => "blah")) , &proc)
# i wish to access &proc and append the call to render
# to within &procs scope (to access block local variable)
concat render('shared/forms/submit') # this obv does not work
end
в shared/forms/_submit.erb у меня есть набор полей и кнопок отправки, которые являются общими для множества моделей. Итак, я хочу, чтобы это отображалось из области видимости form_for, чтобы был доступ к f.
f.text_field :foo
f.hidden_field :bar
f.submit "Save"
Идея состоит в том, чтобы использовать его так в представлениях:
simple_form_helper :object do |f|
f.text_field :name
f.text_field :description
f.text_field :other_field
# want common fields and submit button appended here
# I could just call render("shared/forms/submit") here
# but that does not seem very DRY. Or am I too unreasonable?
end
Таким образом, он работает как старый добрый form_for: создает форму для некоторого :object со специфическими для него полями. А затем добавляет партиал с полями, которые являются общими для множества моделей.
Есть ли способ сделать это? Возможно, есть лучший способ?
Спасибо!