2012-04-30 4 views
1

登録ウィザードでアカウントレコードを使用して無効なユーザーレコードを保存しています。条件付きで特定のユーザー属性の検証をスキップできる方法があります。それが有効であることを示すアソシエーションを介してデータの有効性をチェックすると、自分自身の有効性をチェックすると無効と表示されます。ネストされた関連付けによって無効なデータを保存すると、有効なものとして表示されますか?

例:

$ account = Account.new 
$ account.users.new(:email => nil) 
$ account.save 
=> true 
$ account.users.last.valid? 
=> true 
$ User.last == account.users.last 
=> true 
$ User.last.valid? 
=> false 

任意のアイデア?

答えて

1

メモリとデータベースを使用しているため、同じことはしません。

account.users.last.valid? 

アカウントオブジェクトから、ユーザーアソシエーション(メモリ内)を取得し、最後の要素を取得し、有効かどうかを確認します。データベース内の最後のユーザと(メモリ内)account.usersアソシエーションの最後のユーザーの、および主キーが同じである場合に真を返す:(idフィールド)

User.last == account.users.last 

は、主キーを比較します。

User.last.valid? 

データベースの最後のユーザーが有効かどうかを確認します。

は、以下のことを試してみてください。

account.users(true).last.valid? 

真の引数は、データベースからユーザーの関連付けを再ロードします。

+0

ああ、それは物事をクリアします。私は私のテストで頭を引っ張ってきました。ありがとう。 – Nathan

関連する問題