0

Rails モードでいくつかのコードをドライアップしようとしています。

define_method を使用して枯渇させようとしている 4 つのバリデーターがありますが、正しく機能していません。以下にコメントアウトされた私の試みと、その下の元の方法を見ることができます。せいぜい検証が得られず、最悪の場合、次のようになります。

未定義のローカル変数またはメソッド「validate_weight」

class Product < ActiveRecord::Base

PRODUCT_DIMENSION_FIELDS = [:weight, :height, :width, :depth]

....

PRODUCT_DIMENSION_FIELDS.each do |meth|
  #define_method('validate_' + meth.to_s) do
  #  errors.add(meth, "can't be blank") if has_parents? && meth.empty?
  #end

  #define_singleton_method('validate_' + meth.to_s) do
  #  errors.add(meth, "can't be blank") if has_parents? && meth.empty?
  #end

  #self.class.send(:define_method, ('validate_' + meth.to_s).to_sym) do
  #  errors.add(meth, "can't be blank") if has_parents? && meth.empty?
  #end

end

# attempting to dry up these methods

def validate_weight
  errors.add(:weight , "can't be blank") if has_parents? && weight.empty?
end

def validate_height
  errors.add(:height , "can't be blank") if has_parents? && height.empty?
end

def validate_width
  errors.add(:width , "can't be blank") if has_parents? && width.empty?
end

def validate_depth
  errors.add(:depth , "can't be blank") if has_parents? && depth.empty?
end

end

誰にもアイデアはありますか?

4

1 に答える 1

0

通常のプレゼンスバリデータを使用しないのはなぜですか?

class Product < ActiveRecord::Base

  PRODUCT_DIMENSION_FIELDS = [:weight, :height, :width, :depth]

  validates_presence_of *PRODUCT_DIMENSION_FIELDS, if: :has_parents?

end
于 2013-08-27T02:31:50.040 に答える