Change default Rails text_area helper rows/cols

2020-07-17 07:17发布

I am finding myself specifying :rows => 5 on all my text_area form helpers, So I looked up its definition and found the DEFAULT_TEXT_AREA_OPTIONS to be the hash dictating these options. However, the hash has this freeze method on it and I looked it up, it means it can't be changed. If you could recommend me some options to try to do a app-wide :rows => 5 for all text area, I'd really appreciate it.

Thanks

2条回答
Luminary・发光体
2楼-- · 2020-07-17 07:50

You can do:

  1. Write own helper:

    def readable_text_area(form, method, options = {}) form.text_area(method, options) end

  2. or redefine text_area method delegating to original text_area with proper options

  3. or extend ActionView::Helpers::InstanceTagMethods with your own method "my_text_area" and delegate to original text_area with proper options. Then you can use "f.my_text_area(...)"

  4. or change DEFAULT_TEXT_AREA_OPTIONS:

.

module ActionView::Helpers::InstanceTagMethods
  remove_const :DEFAULT_TEXT_AREA_OPTIONS
  DEFAULT_TEXT_AREA_OPTIONS = { "cols" => 40, "rows" => 5 }
end

Option 1 is most clean. 2 & 3 patch known public interface - seems acceptable. 4 patches internals - risky.

查看更多
爷、活的狠高调
3楼-- · 2020-07-17 08:10

I'm a fan of:

class ActionView::Helpers::InstanceTag
  silence_warnings do
    DEFAULT_FIELD_OPTIONS = {}
    DEFAULT_TEXT_AREA_OPTIONS = {}
  end
end

As @gertas warned this is patching internals so it comes with risk. These constants have moved around in Rails occasionally. But overall it is not a huge deal. Either:

  1. You are using CSS for width and height so these attributes are being ignored anyway. In that case all you are doing is saving a few useless characters from moving across the screen. If it stops working you just spend a few extra characters until you notice it.
  2. You are using these attributes so when the hack stops working it becomes obvious (the field size changes) and you can fix it quickly.

So it does come with risk. But not much and it the most straight forward way to adjust these defaults.

查看更多
登录 后发表回答