私のモデルでは、Item
は によって作成され、User
多くの で購入でき、 は で多くUsers
のUser
を購入できItems
ます。
User
、Item
、およびは、簡潔にするために省略された余分な詳細Purchase
を次のように使用して定義されます。AcvtiveRecord
class User < ActiveRecord::Base
# various other fields
has_many :items, :foreign_key => :creator_id
has_many :purchased_items, :through => :purchases, :source => :item
end
class Item < ActiveRecord::Base
# various other fields
belongs_to :creator, :class_name => 'User'
has_many :buyers, :through => :purchases, :source => :user
end
class Purchase < ActiveRecord::Base
belongs_to :item
belongs_to :user
# various other fields
end
また、rspec
テストも次のように切り取られました。
describe "user purchasing" do
it "should allow a user to purchase an item" do
a_purchase = Purchase.create!(:item => @item, # set up in `before :each`
:user => @user # set up in `before :each`
)
a_purchase.should_not eq(nil) # passes
@item.buyers.should include @user # fails
@user.purchased_items.should include @item # fails
end
end
これにより、
1) Purchase user purchasing should allow a user to purchase an item
Failure/Error: @item.buyers.should include @user
ActiveRecord::HasManyThroughAssociationNotFoundError:
Could not find the association :purchases in model Item
同様に、スワップし@file_item.buyers.should include @user
て@user.purchased_items.should include @item
同等のものを取得した場合
1) Purchase user purchasing should allow a user to purchase an item
Failure/Error: @user.purchased_items.should include @item
ActiveRecord::HasManyThroughAssociationNotFoundError:
Could not find the association :purchases in model User
私migration
のように見えます
create_table :users do |t|
# various fields
end
create_table :items do |t|
t.integer :creator_id # file belongs_to creator, user has_many items
# various fields
end
create_table :purchases do |t|
t.integer :user_id
t.integer :item_id
# various fields
end
私は何を間違えましたか?