2016-12-27 7 views
0

私はcopyメソッドを持っていて、オブジェクトを複製し、そのオブジェクトの属性の一部を変更します。これを保存するとNameActiveRecord::RecordInvalidというエラーが表示されます。ただし、name属性には一意性制約はありません。したがって、これは失敗してはいけません。一意性制約のないフィールドでActiveRecord :: RecordInvalidが発生する原因は何ですか?

さらに、名前が変更されて一意になるため、このメソッドをデバッグすると、このようなことが示されます。一意制約を持たないフィールドでこのエラーを取得するにはどうしたらいいですか?

RSpecに関連して、これに関する質問がたくさんありましたが、これはテスト環境ではないため、DBの問題ではありません。

私はコードを掲載していないことを認識しています。私はこのようなことを引き起こす可能性のある一般的な答えを探しています。

+0

エラーには何か?つまり、これは最初の一見です。 –

+0

複製オブジェクトのIDが変更されていない可能性がありますか? – 31piy

答えて

0

あなたのコードとRailsのバージョンを表示することができれば、実際の問題を突き止めるほうがはるかに簡単です。しかし、一般的な答えをお探しの場合、一般的な答えはRecordInvalidがbangメソッド(主にsave!validate!など)とその下の2つをcreate!,update!のように呼び出す方法によって生成されます。この例外は、検証が失敗した場合にこれらのメソッドによって発生します。検証は、検証設定に依存する何百万もの理由から失敗する可能性があります。

この例外は、無効な関連レコードでこれらのメソッドが呼び出されたときに発生する可能性があります。

また、独自の検証を定義してfalseを返すと、検証が失敗する可能性があります。

関連する問題