2012-01-18 6 views
0

単純な検証呼び出しで、またはバリデーターメソッドで2つの列からなる名前を検証するにはどうすればよいですか?2つの列で構成される名前の検証方法を教えてください。

私は、2つの列、firstnameおよびsurnameからなる名前を持っています。レコードは、firstname + surnameが一意である場合にのみ有効です。

firstname: "lala la"を追加すると、surname: "le li lo"は唯一であるため有効です。

私はfirstname: "lala"surname: "la le li lo"、およびfirstnamesurnameの連結を入力した場合、2番目が有効ではありません、どちらの例でも同様です。

私はこれを行う簡単な方法を見つけることができません。

私はのようなもの試してみました:これの

validates_uniqueness_of :firstname, :surname, :scope => {:firstname, :surname} 

またはそれらの組み合わせを、それはうまくいきませんでした。 validates_withで行うことができることが、あなたはどこ質問からご縁のケースをテストする場合、パフォーマンスに注意してください:

validates :surname, :uniqueness => { :scope => :firstname } 
validates :firstname, :uniqueness => { :scope => :surname } 

EDITを:

+0

ここをクリックしてください:http://stackoverflow.com/questions/2291240/rails-models-and-unique-combinations – microspino

+0

私は完全性を維持するために、データベース内のユニークな複合キーを使用しています。コードは、挿入と更新の際に例外に反応します。それは問題を処理する別の方法ですが、非常に伝統的であり、おそらくレガシーデータベースがどのようにセットアップされるのでしょうか。 –

答えて

3

f irstname = "ララ"、姓= "leli"

FIRSTNAME = "ラ"、姓= "llaleli"、異なっているので、検証を以下を

validates :surname, :uniqueness => { :scope => :firstname } 

試して、それを検証することはできませんこの

アイデアは(before_validationのようなコールバックで)その計算フルネームであり、現在その列に検証を追加テーブルに格納し(だから、あなたは別の列を必要とする)

before_validation :compute_fullname 
validates :fullname, :uniqueness => true 


def compute_fullname 
    fullname = (first_name+surname).replace ' ','' #i don't like gusb you can try it too 
end 
+0

を追加してくれてありがとうございます。この1つはうまくいきましたが、その代わりに働きましたが、とにかく私は.tr( ""、 "")に使用されていました。コントローラではそのfullnameをuser.fullname = user 。コンピュータ。full_nameそれ以外の場合は何もしていない私はなぜ知っている? :Oと_formには、このフルネームの入力を無効にする必要がありました。エラーが表示されないので、私は何とかそれを改善することができますか?P thanxたくさんの人 – Redrick

+0

あなたを助けてうれしいです。ユーザーが大量割り当てで値を設定できないように保護する必要があります – Naveed

2

これを試してみてください

firstname: "lala la", surname: "le li lo" 

があります重複:

firstname: "lala", surname: "la le li lo" 
+0

これは速かったですが、これは静かではありませんが、私がそこに書きましたが、2番目のものが有効であると言います... 私はどうにかしてそれらのパラメータを一緒に結合したテーブルと一緒に結合して検証する必要があります。 ..どのように? : – Redrick

+0

あなたはそれを見てみたいでしょう:http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates_with – jipiboily

+0

しかし、これはパフォーマンスの抱擁かもしれません... – jipiboily

関連する問題