Я пытаюсь высушить кучу кода форм, у которого есть повторяющийся набор полей, появляющихся в конце каждой формы. Я написал помощник, который оборачивается вокруг помощника 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: создает форму для некоторых: объект с полями, специфичными для него. А затем добавляет частичное с полями, которые являются общими для нескольких моделей.
Есть ли способ сделать это? Может быть, есть лучший способ?
Спасибо!