方法
class DummyFormBuilder < ActionView::Helpers::FormBuilder
# 引数に Active Record を渡す前提。
def initialize(model_object)
object_name = model_object.model_name.param_key
template = ActionView::Base.empty
options = {}
super(object_name, model_object, template, options)
end
end
# user #=> #<User id: 1, ..., updated_at: "2022-01-01 00:00:00.000000000 +0900">
# user.model_name.param_key #=> "user"
let!(:f) { DummyFormBuilder.new(user) }
バージョン情報
- Ruby 2.7.6
- Rails 6.1.6
参考
Rails
-
https://github.com/rails/rails/blob/53410537594be0c0a528cff53dce433dd386cb6a/actionview/lib/action_view/base.rb#L216-L218
- ActionView::Base オブジェクトを生成するには ActionView::Base.empty が一番手っ取り早そうだと分かった。
-
https://github.com/rails/rails/blob/53410537594be0c0a528cff53dce433dd386cb6a/actionview/lib/action_view/helpers/form_helper.rb#L1668-L1686
- ActionView::Helpers::FormBuilder#initialize の実装を確認した。
-
https://github.com/rails/rails/blob/147557dc16a5bd8bab96f999f359a570232e1873/actionview/lib/action_view/helpers/form_helper.rb#L745
- ActionView::Helpers::FormHelper#form_for や ActionView::Helpers::FormHelper#form_with では
object_name
を ActiveModel::Name#param_key で生成していることを確認した。
- ActionView::Helpers::FormHelper#form_for や ActionView::Helpers::FormHelper#form_with では