【发布时间】:2011-04-12 19:15:40
【问题描述】:
我发现自己在我的所有 text_area 表单助手中指定了 :rows => 5,因此我查看了它的定义并发现 DEFAULT_TEXT_AREA_OPTIONS 是指示这些选项的哈希。但是,哈希上有这个冻结方法,我查了一下,这意味着它不能更改。如果您可以向我推荐一些选项来尝试为所有文本区域执行应用程序范围的 :rows => 5,我将非常感激。
谢谢
【问题讨论】:
标签: ruby-on-rails helpers
我发现自己在我的所有 text_area 表单助手中指定了 :rows => 5,因此我查看了它的定义并发现 DEFAULT_TEXT_AREA_OPTIONS 是指示这些选项的哈希。但是,哈希上有这个冻结方法,我查了一下,这意味着它不能更改。如果您可以向我推荐一些选项来尝试为所有文本区域执行应用程序范围的 :rows => 5,我将非常感激。
谢谢
【问题讨论】:
标签: ruby-on-rails helpers
我喜欢:
class ActionView::Helpers::InstanceTag
silence_warnings do
DEFAULT_FIELD_OPTIONS = {}
DEFAULT_TEXT_AREA_OPTIONS = {}
end
end
正如@gertas 警告的那样,这是在修补内部结构,因此会带来风险。这些常量偶尔会在 Rails 中移动。但总的来说,这并不是什么大问题。要么:
所以它确实有风险。但不多,这是调整这些默认值的最直接方法。
【讨论】:
你可以这样做:
编写自己的助手:
def readable_text_area(form, method, options = {}) form.text_area(方法,选项) 结束
或使用适当的选项重新定义 text_area 方法委托给原始 text_area
或使用您自己的方法“my_text_area”扩展 ActionView::Helpers::InstanceTagMethods 并使用适当的选项委托给原始 text_area。然后你可以使用“f.my_text_area(...)”
或更改 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 个补丁内部 - 有风险。
【讨论】: