0

こんにちは私はrpecを書きたい私のEnrolledAccountモデルに次のメソッドを持っています。私の質問は、rspecでItemとEnrolledAccountの間に関連付けを作成するにはどうすればよいですか。

  def delete_account
    items = self.items
    item_array = items.blank? ? [] : items.collect {|i| i.id } 
    ItemShippingDetail.destroy_all(["item_id in (?)", item_array]) unless item_array.blank?
    ItemPaymentDetail.destroy_all(["item_id in (?)", item_array]) unless item_array.blank?
    Item.delete_all(["enrolled_account_id = ?", self.id])
    self.delete
  end
4

1 に答える 1

1

通常、factory_girlを使用して、データベース内に一連の関連オブジェクトを作成し、それに対してテストを行います。

しかし、あなたのコードから、関係が正しく設定されていないという印象を受けます。リレーションを設定すると、アイテムを自動的に削除するときに何をすべきかをレールに指示できます。

例えば

class EnrolledAccount
  has_many :items, :dependent => :destroy
  has_many :item_shipping_details, :through => :items
  has_many :item_payment_details, :through => :items
end

class Item
  has_many :item_shipping_details, :dependent => :destroy
  has_many :item_payment_details, :dependent => :destroy
end

モデルがそのように定義されている場合、削除は自動的に処理されます。

したがって、あなたの代わりに次のdelete_accountように書くことができます:

account = EnrolledAccount.find(params[:id])
account.destroy

[編集] shouldaや顕著なような宝石を使用すると、仕様を書くことも非常に簡単です:

describe EnrolledAccount do
  it { should have_many :items }
  it { should have_many :item_shipping_details }
end

お役に立てれば。

于 2011-11-02T13:07:20.277 に答える