2017-10-14 16 views
0

私はFacebookスタイルのフレンドシステムを実装しようとしています。私はいくつかのチュートリアルを読み、私が間違っていることを理解できません。フレンドシップコントローラとフレンドを追加するためのビューのリンクは動作しますが、データベースレベルではエラーが発生します。私はレールのコンソールを開き、置くときフレンドシップ自己参照協会

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'というエラーをスローすることだと思います。シャベルの構文(<<)は、2番目のユーザーを最初のユーザーのコレクションプロキシに追加して友だちを作成しますが、友だちの作成には問題があるようです – mef27