Изменить вспомогательные строки/столбцы Rails text_area по умолчанию

Я обнаружил, что указываю :rows => 5 во всех моих помощниках формы text_area, поэтому я просмотрел его определение и обнаружил, что DEFAULT_TEXT_AREA_OPTIONS является хэшем, определяющим эти параметры. Однако у хэша есть этот метод замораживания, и я посмотрел его, это означает, что его нельзя изменить. Если бы вы могли порекомендовать мне несколько вариантов, чтобы попытаться сделать :rows => 5 для всей текстовой области для всего приложения, я был бы очень признателен.

Спасибо


person Nik So    schedule 15.09.2010    source источник


Ответы (2)


Ты можешь сделать:

  1. Напишите собственный помощник:

    def readable_text_area (форма, метод, параметры = {}) form.text_area (метод, параметры) конец

  2. или переопределить метод text_area, делегирующий исходному text_area с соответствующими параметрами

  3. или расширьте ActionView::Helpers::InstanceTagMethods своим собственным методом "my_text_area" и делегируйте его исходному text_area с соответствующими параметрами. Затем вы можете использовать "f.my_text_area(...)"

  4. или измените DEFAULT_TEXT_AREA_OPTIONS:

.

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

Вариант 1 самый чистый. 2 и 3 патч известного общедоступного интерфейса - кажется приемлемым. 4 патча внутренностей - рискованно.

person gertas    schedule 15.09.2010
comment
Ого, спасибо за такие подробные ответы с факторами риска. Я пойду с (1). Спасибо! - person Nik So; 16.09.2010

Я фанат:

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

Как предупредил @gertas, это исправление внутренних компонентов, поэтому это сопряжено с риском. Эти константы время от времени перемещались в Rails. Но в целом это не имеет большого значения. Либо:

  1. Вы используете CSS для ширины и высоты, поэтому эти атрибуты все равно игнорируются. В этом случае все, что вы делаете, это спасаете несколько бесполезных символов от перемещения по экрану. Если он перестанет работать, вы просто потратите несколько дополнительных символов, пока не заметите это.
  2. Вы используете эти атрибуты, поэтому, когда хак перестает работать, это становится очевидным (изменяется размер поля), и вы можете быстро это исправить.

Так что это сопряжено с риском. Но не так много, и это самый простой способ настроить эти значения по умолчанию.

person Eric Anderson    schedule 02.04.2012
comment
Привет, Эрик, спасибо, что высказали свое мнение по этому поводу. Вы правы в том, что риск, будучи риском, на самом деле не так уж велик. И что я все равно использую CSS для определения ширины. Причина, по которой я хотел использовать атрибут rows вместо ширины, заключается в следующем: 1) мне не нравится CSS в целом, но это тривиально, 2) настройка строк здесь кажется мне правильной, потому что как элемент HTML, сколько строки, которые он получает, я думаю, должны быть спланированы там, где он определен/вызывается. - person Nik So; 02.04.2012
comment
Эти параметры по умолчанию будут удалены из Rails, поэтому их можно использовать безопасно. См. github.com/rails/rails/issues/5324. - person Michaël Witrant; 17.02.2013