【发布时间】:2010-11-28 01:56:17
【问题描述】:
我对 Rails 比较陌生,有点惊讶这不是一种可配置的行为……至少我还没找到?!?我原以为 99% 的表单会受益于从所有 string 和 text 字段中修剪空白?!?我猜我错了……
无论如何,我正在寻找一种 DRY 方法来从 Rails 3 应用程序中的表单字段(类型为 :string 和 :text)中去除所有空格。
视图具有自动引用(包括?)并且可用于每个视图的帮助器......但是模型似乎没有这样的东西?!?还是他们?
所以目前我正在执行以下操作,其中 首先 需要 并且 然后 包括 whitespace_helper(又名 WhitespaceHelper)。但这对我来说似乎仍然不是很干燥,但它确实有效......
类名.rb:
require 'whitespace_helper'
class ClassName < ActiveRecord::Base
include WhitespaceHelper
before_validation :strip_blanks
...
protected
def strip_blanks
self.attributeA.strip!
self.attributeB.strip!
...
end
lib/whitespace_helper.rb:
module WhitespaceHelper
def strip_whitespace
self.attributes.each_pair do |key, value|
self[key] = value.strip if value.respond_to?('strip')
end
end
我想我正在寻找一个单一的(D.R.Y.)方法(类?)放在某个地方(lib/?),它将获取参数(或属性)列表并删除空格(.strip!?)从每个属性没有被具体命名。
【问题讨论】:
-
你可以把它放在一个 helper 中并包含在你的模型中
-
谢谢,但这似乎只有在我先
require whitespace_helper然后include WhitespaceHelper在同一个文件中时才有效。这干得怎么样?似乎多余...有人可以解释一下吗? -
'include' 用于将模块包含到类中。您可以在同一个文件中拥有一个模块和一个类。如果您希望该类包含该模块,您仍然必须使用“包含”语句。 'require' 语句加载一个 ruby 文件。加载文件不会将其包含在类中,这就是您需要包含的原因。
-
谢谢!所以,我想这归结为我的问题的本质......如果我想在我所有使用表单输入的模型中访问那个简单的 2(4?,6?)行助手
WhitespaceHelper,那么我需要添加require和include到每个model.rb文件?对我来说似乎不是很红宝石风格或干燥?!?我觉得我一定错过了什么?视图(甚至控制器)怎么能对 helper 如此友好,而模型却不是?
标签: ruby-on-rails validation whitespace dry helpers