2017-10-14 14 views
0

저는 페이스 북 스타일의 친구 시스템을 구현하려고했습니다. 몇 가지 자습서를 읽었으며 내가 잘못하고있는 것을 이해할 수 없습니다. 우정 컨트롤러와 친구 추가를위한보기의 링크는 작동하지만 데이터베이스 수준에서는 오류가 발생합니다. 나는 레일 콘솔을 열고 넣을 때우정 자체 참조 협회

:

User.find(1).friends << User.find(2) 

를 내가 얻을 :

SQL (0.4ms) INSERT INTO "friendships" ("user_id", "friend_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["user_id", 1], ["friend_id", 2], ["created_at", "2017-10-14 15:01:28.364691"], ["updated_at", "2017-10-14 15:01:28.364691"]] 
(0.1ms) rollback transaction 
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: main.friends: INSERT INTO "friendships" ("user_id", "friend_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) 
from (irb):1 

user.rb

has_many :friendships, dependent: :destroy 
has_many :friends, through: :friendships 

# these are used in the controller 

def befriend(user) 
    friends << user 
end 

def unfriend(user) 
    friends.delete(user) 
end 

def friends?(user) 
    friends.include?(user) 
end 

friendship.rb

belongs_to :user 
belongs_to :friend, class_name: 'User', foreign_key: "friend_id" 

validates :user_id, presence: true 
validates :friend_id, presence: true 

나는 Devise를 인증에 사용하고 있습니다.

답변

0

친구를 만들지 않았습니다 (다른 사용자는 이미 존재 함). 명의 우정은입니다.

user.rb

class User < ActiveRecord::Base 
    has_many :friendships, dependent: :destroy 
    has_many :friends, through: :friendships, source: :friend 
end 

friendship.rb

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

콘솔

User.find(1).friendship.create(friend_id: User.find(2).id) 
+0

안녕하세요, 코드는 불행하게도 같은 오류가 발생하는 것 같다. 나는 그 문제가 우정이 만들어지면 '그런 테이블이 없다 : main.friends'오류를 던진다는 것이다. 삽 구문 (<<)은 두 번째 사용자를 첫 번째 사용자의 콜렉션 프록시에 추가하고 우정을 생성하지만 우정을 만드는 데는 문제가있는 것으로 보입니다 – mef27