これらのテストが正しく機能していることを確認してください。user.rb の has_many :relationships と has_many :reverse_relationships の依存: :destroy オプションを削除して、失敗させました。
他の誰かがMichael Hartl の Rails Tutorial 2nd Edition, Chapter 11 Exercises に取り組んでいる場合に備えて、私が行ったことを共有したいと思います。
この演習からいくつかの疑問が生じました (この投稿の下部を参照)。誰かが助けてくれれば、それは素晴らしいことです。
第 11 章、演習 1:
リレーションシップ モデル (リスト 11.4 とリスト 11.16) に依存する :destroy のテストを追加するには、リスト 10.15 の例に従ってください。
これが私のテストです: spec/models/user_spec.rb
require 'spec_helper'
describe User do
before do
@user = User.new(name: "Example User", email: "user@example.com",
password: "foobar", password_confirmation: "foobar")
end
subject { @user }
[...code omitted...]
describe "relationship associations" do
let(:other_user) { FactoryGirl.create(:user) }
before do
@user.save
@user.follow!(other_user)
other_user.follow!(@user)
end
it "should destroy associated relationships" do
relationships = @user.relationships
@user.destroy
relationships.should be_empty
end
it "should destroy associated reverse relationships" do
reverse_relationships = @user.reverse_relationships
@user.destroy
reverse_relationships.should be_empty
end
end
この演習からいくつかの疑問が生じました。
質問1:
私の最初のテストは、relationship.should be_nil reverse_relationships.should be_nil でした。
しかし、ユーザーが存在しないにもかかわらず、配列がまだ返されていることに気付きました。では、ユーザーが存在せず、関連付けメソッドが呼び出された場合、結果は配列のままですか? これは常に真実ですか?
質問2:
Railsコンソールでユーザーのリレーションシップとreverse_relationshipsを削除してみました。
私はこれを試しました
> user = User.first
> user.relationships
# returns a bunch of relationships
> user.relationships.destroy
=> []
> user.relationships
# returns same bunch of relationships
実際に関係を完全に破壊するにはどうすればよいですか? コンソールで探索するときに知っておくとよいことのようです。
ありがとう!私はまだRailsにかなり慣れていません