with_options みたいに
特定のブロック内で特定のメソッドに同じオプションをつけたいです
show の場合だけフォームメソッドに全部 readonly: true を付けるみたいなことをやりたい場合
特定の条件で hash の中に要素を追加するって3項演算子で短くかけなくて
option = {} option[:readonly] = true if action_name == :show f.text_field, option
みたいにかなり冗長になってしまうのできれいにかく方法はないでしょうか
追記
<%= form_for(@user) do |f| %> <% def f.text_field *args, **option option[:readonly] = true if true action_name == :show f.text_field args, option end %> <%= f.text_field ... %>
のような感じでこのブロック内だけ text_field をオーバーライドするみたいなことはできないでしょうか
パーシャルビューの中にすべてオプションを受け渡してつけてまわるのがすごく冗長な気がして…
追記
https://guides.rubyonrails.org/form_helpers.html#customizing-form-builders
これを使えばできそうかなと思ったんですが
試しに app/helpers/readonly_form_builder.rb に
class ReadonlyFormBuilder < ActionView::Helpers::FormBuilder def text_field(attribute, options={}) options['readonly'] = true super end end
とかいて namespace 内のモデルの _form.html から
<% form_option = readonly ? {builder: ReadonlyFormBuilder} : {} %> <%= form_for @campaign, form_option do |f| %>
という感じでよんでみたんですが
uninitialized constant ActionView::CompiledTemplates::ReadonlyFormBuider
となってしまいます
FormBuilder を継承したクラスをnamespace内のビューで使うにはどこにおいてどうやって呼び出せばいいんでしょうか
ReadonlyFormBuider のインスタンスを作るときにパラメーターを追加して
readonly 以外にも任意のオプションを追加できるようにすることはできるでしょうか
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/03/01 08:43