Я не знаю, что такое «правильный» или «рельсовый» способ сделать это.(Но, конечно, это не ручная обработка формы с %form
.)
В моих приложениях я склонен иметь только одну частичную форму, которая выглядит примерно так:
app/views/widgets/form
- @presenter = local_assigns[:presenter] if local_assigns[:presenter]
= form_tag @presenter.form_path, remote: true, id: @presenter.form_id, class: @presenter.form_classes, data: @presenter.form_data, method: @presenter.form_method do
= @presenter.form_inner
В моем файле presenter_base.rb
у меня есть что-то вроде этого:
class PresenterBase
def render_partial
render(partial: "#{file_name}", locals: {presenter: self})
end
def render_form
render_partial 'widgets/form'
end
end
Итак, чтобы отобразить форму в FooPresenter
, я мог бы сделать что-то вроде:
class FooPresenter < PresenterBase
def present
render_form
end
def form_path
some_form_path(and: :maybe, some: :query_params)
end
def form_id
'my-cool-form'
end
def form_classes
'some cool classes'
end
def form_data
{some: :form, data: :here}
end
def form_method
:post
end
def form_inner
...
end
end
Естественно, есть нечто большее, чем просто (например, как я получаю простой старый объект ruby в render
).Но это должно дать вам ощущение одного способа сделать это.