6

私は Rails に比較的慣れていないので、これが構成可能な動作ではないことに少し驚いています...少なくとも、まだ見つけたものはありませんか?!? フォームの 99% は、すべてのフィールドから空白を削除することでメリットが得られると思っていたでしょうstringtext?!? 私が間違っていると思います...

とにかく、Rails 3 アプリのフォーム フィールド (:string & :text 型) からすべての空白を削除する DRY の方法を探しています。

ビューには、自動的に参照 (含まれていますか?) され、各ビューで使用できるヘルパーがあります...しかし、モデルにはそのようなものがないようです?!? それとも彼らはしますか?

そのため、現在、最初 に 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

私は単一の (DRY) メソッド (クラス?) をどこかに置く ( lib/?) ことを探していると思い.strip! ます。 .

4

3 に答える 3

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
于 2010-11-28T06:33:04.057 に答える
0

私はこれを試していないことに注意してください。クレイジーなアイデアかもしれませんが、次のようなクラスを作成できます。

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

...そして、モデルにAR::Baseの代わりにそれを継承させます:

MyModel < MyActiveRecordBase
  # stuff
end
于 2012-01-18T16:15:21.123 に答える