2016-03-23 9 views

答えて

2

validates :person, :presence => true 

これは、選択しperson_idだけではなく、存在していたが、それはまた、既存のPersonに属していることを保証します。

エラーがある場合、:personにエラーが追加され、person_idには追加されません。検証エラーの表示方法によっては、object.errors[:person]のようなエラーをチェックする必要があります。

あなたはperson_idフィールドの横のエラーを提示したいのですが、あなたのビューを更新することはできません、あなたはpersonをチェックcustom validationを使用したいが、person_idにエラーを追加可能性があります

validate :person_existing 

private 
def person_existing 
    errors.add(:person_id, :missing) if person.blank? 
end 
+0

あなたはなぜ知っていますか検証では検証エラーは表示されません。何も選択せずに[作成]をクリックすると、何も起こりません。 –

+0

私はsimple_form gemを使用しており、他のフィールドからのエラーを表示しますが、collection_selectは反応しません。私はobject.errors.full_messagesを使用し、このショーのエラーは正しく表示されます。 –

+1

@ŁukaszKorol私はあなたの質問に答えるために私の答えを更新しました。 – spickermann

1

が、私はコントローラのアクションから返されたHTMLに対してテストを書くでしょう。これは、ブラウザ内テストを行わない(つまり、Webドライバ/ヘッドレスブラウザを使用する必要がない)という利点をもたらします.HTMLを適切にレンダリングすることは個々のブラウザに任されているため、コントローラーアクションから返されたHTMLが正しいことを確認します。

ユーザーが特定のアイテムを選択したときに、そのアイテムが選択されていることを確認するには...実際にブラウザを使用してそのジョブを実行するのは実際のところですそれをテストする。しかし、あなたはタグの属性(see here)を確認することができます。

これは確かにあなたが何をしようとしている場合、ビューテストであまりにも狂っていないと言われました。このビューは、頻繁に変更される大部分のアプリケーションの一部であり、非常に脆弱です。テストスイートでビューの変更をたくさん追跡しているかもしれません。

私が使用する
関連する問題