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

何か案は?

4

1 に答える 1

1

一方がメモリを使用し、もう一方がデータベースを使用しているため、同じことを行うわけではありません。

account.users.last.valid?

アカウント オブジェクトから、(メモリ内の) ユーザーの関連付けを取得し、最後の要素を取得して、有効かどうかを確認します。

User.last == account.users.last

データベースの最後のユーザーの主キー (:id フィールド) と account.users 関連付け (メモリ内) の最後のユーザーを比較し、主キーが同じ場合は true を返します。

User.last.valid?

データベース内の最後のユーザーが有効かどうかを確認してください。

次のことを試してください。

account.users(true).last.valid?

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

于 2012-04-30T19:39:34.353 に答える