hihorails 3文字列の妥当性確認
私の文字列が「何か」ではないかもしれないということをレールに伝える方法はありますか?
私は
validates :string, :not => 'something'
おかげ klump
hihorails 3文字列の妥当性確認
私の文字列が「何か」ではないかもしれないということをレールに伝える方法はありますか?
私は
validates :string, :not => 'something'
おかげ klump
仕事をするこれらのどちらか(文書化のための方法をクリックしてください)のようなものを探しています:おそらく最高の
最も速い方法で、他の単語のために伸ばしやすい:
validates_exclusion_of :string, :in => %w[something]
これは正規表現を使用することの利点を持っているので、あなたは簡単に一般化することができます:
validates_format_of :string, :without => /\A(something)\Z/
あなたは/\A(something|somethingelse|somemore)\Z/
これは、あなたが達成可能な一般的なケースであると、他の言葉に拡張することができますいずれかの検証:
validate :cant_be_something
def cant_be_something
errors.add (:string, "can't be something") if self.string == "something"
end
正確にあなたが使用することができますあなたが提案した構文(validates :string, :not => "something"
)を取得するにはこのコードは(レールのソースのマスターブランチを読んでいる間にこれを発見しましたが、それはうまくいくはずですが、ですが、3ヶ月前のインストールでは動作しません)。いくつかの方法
class NotValidator < ActiveModel::EachValidator
def validate_each (record, attribute, value)
record.errors[attribute] << "must not be #{options{:with}}" if value == options[:with]
end
end
:あなたのパスにこのどこかを追加します。あなたは何の正確なリストを持っている場合、それはすることはできません。
validates_exclusion_of :string, :in => ["something", "something else"]
あなたはそれがすべてで列として存在していないことを確実にしたい場合:
validates_format_of :string, :with => /\A(?!something)\Z/
それはより複雑である場合と、あなたは面倒な詳細を隠したい:
validate :not_something
def not_something
errors.add(:string, "Can't be something") if string =~ /something/
end
+1良いもの!私たちの答えは収束していると思います:) –
ええ、両方ともかなり徹底的にカバーしていると思います;) '\ A'と' \ Z'を使うのはおそらくより安全なアイデアです。 –