4

我发现自己在我的所有 text_area 表单助手上指定了 :rows => 5,所以我查看了它的定义,发现 DEFAULT_TEXT_AREA_OPTIONS 是指示这些选项的哈希。但是,哈希上有这个冻结方法,我查了一下,这意味着它无法更改。如果您可以向我推荐一些选项来尝试为所有文本区域执行应用程序范围的 :rows => 5,我将非常感激。

谢谢

4

2 回答 2

6

你可以做:

  1. 编写自己的助手:

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

  2. 或使用适当的选项重新定义委派给原始 text_area 的 text_area 方法

  3. 或使用您自己的方法“my_text_area”扩展 ActionView::Helpers::InstanceTagMethods 并使用适当的选项委托给原始 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 个补丁内部 - 有风险。

于 2010-09-15T21:36:53.423 回答
2

我是:

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

正如@gertas 警告的那样,这是在修补内部结构,因此存在风险。这些常量偶尔会在 Rails 中移动。但总的来说,这并不是什么大问题。任何一个:

  1. 您正在使用 CSS 作为宽度和高度,因此这些属性无论如何都会被忽略。在这种情况下,您所做的只是避免在屏幕上移动一些无用的字符。如果它停止工作,您只需花费一些额外的字符,直到您注意到它。
  2. 您正在使用这些属性,因此当黑客停止工作时,它变得很明显(字段大小发生变化)并且您可以快速修复它。

所以它确实伴随着风险。但不多,它是调整这些默认值的最直接的方法。

于 2012-04-02T01:59:21.913 回答