Rails 3 удаляет пробелы before_validation на всех формах - PullRequest
6 голосов
/ 28 ноября 2010

Я относительно новичок в Rails и немного удивлен, что это не настраиваемое поведение ... по крайней мере, пока я не смог найти?!? Я думал бы, что 99% форм извлекут выгоду из обрезки пробелов из всех полей string & text?!? Думаю, я не прав ...

Несмотря на это, я ищу СУХОЙ способ убрать все пробелы из полей формы (типа: строка &: текст) в приложении Rails 3.

Представления имеют помощников, которые автоматически ссылаются (включаются?) И доступны для каждого представления ... но модели, похоже, не имеют такой вещи?!? Или они?

Итак, в настоящее время я делаю следующее: сначала требует и , затем включает 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

Библиотека / 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

Полагаю, я ищу единственный (СУХОЙ) метод (класс?), Который можно поместить куда-нибудь (lib/?), Который бы взял список параметров (или атрибутов) и удалил пробел (.strip!?) от каждого атрибута без названий.

Ответы [ 3 ]

7 голосов
/ 28 ноября 2010

Создайте 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
1 голос
/ 04 октября 2013

Используйте гем AutoStripAttributes для Rails .это поможет вам легко и чисто выполнить задачу.

class User < ActiveRecord::Base
 # Normal usage where " aaa   bbb\t " changes to "aaa bbb"
  auto_strip_attributes :nick, :comment

  # Squeezes spaces inside the string: "James   Bond  " => "James Bond"
  auto_strip_attributes :name, :squish => true

  # Won't set to null even if string is blank. "   " => ""
  auto_strip_attributes :email, :nullify => false
end
0 голосов
/ 18 января 2012

Примечание. Я не пробовал этого, и это может быть сумасшедшей идеей, но вы можете создать класс, подобный этому:

MyActiveRecordBase < ActiveRecord::Base
  require 'whitespace_helper'  
  include WhitespaceHelper
end

... и затем ваши модели наследуются от этого вместо AR:: База:

MyModel < MyActiveRecordBase
  # stuff
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...