私はこの種の表記法を他の場所で見たことがあります:@user = FactoryGirl.create(:user)
しかし、このインスタンス変数の振る舞いを正確に把握することはできません。工場の女の子が作成する永続的なデータにインスタンス変数を割り当てる動作
具体的には、このインスタンス変数の動作が不思議です。たとえば、RSpecで統合テストを作成しています。 (例えば、@video.title
を使用して))私はビデオインスタンスの異なる属性にアクセスして、その点で支障がない
@video = FactoryGirl.create(:video, title: "Test title")
:試験の一つで、私は私のVideoクラスのインスタンスにインスタンス変数を割り当てようとしました。
しかし、ユーザーがフォームの「タイトル」フィールドをクリアできるようにするための統合テストを作成しています。ビデオが更新されると、タイトルがデータベースで消去されます。例えば、何らかの理由で
click_link "Edit"
fill_in "Title", with: ""
click_button "Update Video"
expect(find('#title')).to_not have_content "Test title"
、正しくページが表示されますが、私はインスタンス変数を使用してインスタンスにアクセスしようとすると、何の変化が発生していない:print @video.title
戻り"Test title"
を奇妙である何がそのAでありますさまざまな統合テスト私はビデオインスタンスの属性を更新するために同様のプロセスを使用します(たとえば、「更新されたテストのタイトル」)。私は次に、属性がウェブページ内で正しく更新されているかどうかを確認するためにテストしましたが、この時間インスタンス変数も反映しました(print @video.title
を使用)。
これがなぜこのようになるのでしょうか。
DBからレコードを更新するために '@ video.reload.title'を試してください。 –
@SergiiKは正しいアイデアを持っています。 '@ video'を作成すると、データベースの変更(ビデオオブジェクト内の静的コピー)から切断されます。' reload'は、最初の割り当て以降に加えられた変更をデータベースからリフレッシュします。 – engineersmnky
@engineersmnky、ありがとう、これは問題を解決しました!このためのリソースはありますか、それについて私が見ることができるドキュメントはありますか?あなたは私の元の投稿からでもわかることができたかもしれませんが、私がこれを理解するためにどのような質問をするかを知ることさえ困難でした。 – RyanQuey