2016-04-10 36 views
0

我試駕的社交網絡應用上ROR的ActiveRecord :: AssociationTypeMismatch:預計用戶(#70180695416600),得到了哈希(#70180672006440)

我會讓本身的代碼說話:

用戶。 RB:

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    has_many :friendships, dependent: :destroy 
    has_many :inverse_friendships, class_name: "Friendship", foreign_key: "friend_id", dependent: :destroy 

    def request_friendship(user_2) 
    self.friendships.create(friend: user_2) 
    end 
end 

Friendship.rb:

class Friendship < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :friend, class_name: "User" 

    def accept_friendship 
    self.update_attributes(state: "active", friended_at: Time.now) 
    end 

    def deny_friendship 
    self.destroy 
    end 

    def cancel_friendship 
    self.destroy 
    end 
end 

和我的用戶模型試驗.. user_spec.rb:

require 'spec_helper' 

describe User, :type => :model do 
    let!(:user1) { User.create(email: '[email protected]', password: 'testtest', password_confirmation: 'testtest') } 
    let!(:user2) { User.create(email: '[email protected]', password: 'testtest', password_confirmation: 'testtest') } 

    it "new user has no friendships" do 
    expect(user1.friendships.length).to eq 0 
    end 

    it "can add another user as a friend" do 
    user2 = User.create(email: '[email protected]', password: 'testtest', password_confirmation: 'testtest') 
    user1.request_friendship(friend: user2) 
    expect(user1.friendships.length).to eq 1 
    end 
end 

當我運行這個測試,我得到以下錯誤:

2) User can add another user as a friend 
    Failure/Error: self.friendships.create(friend: user_2) 

    ActiveRecord::AssociationTypeMismatch: 
     User(#70180695416600) expected, got Hash(#70180672006440) 
    # ./app/models/user.rb:11:in `request_friendship' 
    # ./spec/models/user_spec.rb:13:in `block (2 levels) in <top (required)>' 

我希望我能提供更多的細節,但該代碼是非常基本的,我只是不知道如何在我的用戶模型上測試.request_friendship方法。

提前致謝!

回答

2
user1.request_friendship(friend: user2) 

friend: user2此行要傳遞的n個哈希,該哈希

{ :friend => user2 } 

但方法需要的用戶。所以

user1.request_friendship(user2) 
+1

天才,謝謝!還有一種情況是,所有的語法糖都回來困擾着我 –

相關問題