Rails 3在所有表单上删除before_validation的空格

Mel*_*emi 6 validation whitespace ruby-on-rails dry helpers

我对Rails相对较新,有点惊讶这不是一个可配置的行为......至少没有一个我能找到的?!?我本来以为的形式99%的人会从空白受益于所有被修剪stringtext领域?!?猜猜我错了......

无论如何,我正在寻找一种干燥的方法来从Rails 3应用程序中的表单字段(类型:string&:text)中删除所有空格.

视图有自动引用(包括?)并可用于每个视图的助手......但模型似乎没有这样的东西?!?或者他们呢?

所以目前我做的是首先 需要的,然后 包括 whitespace_helper(又名WhitespaceHelper).但这对我来说似乎并不是很干,但它有效......

ClassName.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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我想我正在寻找单个(DRY)方法(类?)来放置某个(lib/?),它将获取一个params(或属性)列表,并.strip! 从每个属性中删除空白(?),而不是具体命名.

Ada*_*sek 8

创建一个before_validation助手所看到这里

module Trimmer
  def trimmed_fields *field_list  
    before_validation do |model|
      field_list.each do |n|
        model[n] = model[n].strip if model[n].respond_to?('strip')
      end
    end
  end
end

require 'trimmer'
class ClassName < ActiveRecord::Base
  extend Trimmer
  trimmed_fields :attributeA, :attributeB
end
Run Code Online (Sandbox Code Playgroud)