0
我已經通過使用與http://railscasts.com/episodes/163-self-referential-association中相同的程序實現了朋友關係。我想從同一個城市找朋友的朋友,但我無法弄清楚如何得到朋友的朋友和來自同一個城市的朋友。我對Ruby on Rails和主動記錄頗爲陌生,對我來說很裸露。如何獲得使用活動記錄的朋友的朋友?
我打過電話:
User.find_by(first_name: user_name).friendships.friendships(:f_of_f).cities.where(name: "london").pluck(:f)
,並沒有工作。
我的代碼如下:
class User < ActiveRecord::Base
has_many :friendships
has_many :friends, through: :friendships
has_many :inverse_friendships, class_name: 'Friendship', foreign_key: 'friend_id'
has_many :inverse_friends, through: :inverse_friendships, source: :user
has_many :cities, through: :user_cities
has_many :user_cities
belongs_to :company
has_many :comments, dependent: :delete_all
has_many :reviews, dependent: :delete_all
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
def self.friends_reviews_on_company(user_id, city_id)
User.find_by(first_name: user_name).friendships.friendships(:f_of_f).cities.where(name: "london").pluck(:f)
end
end
和城市:
class City < ActiveRecord::Base
has_many :user_cities
has_many :users, through: :user_cities
end
和user_city:
class UserCity < ActiveRecord::Base
belongs_to :city
belongs_to :user
end
和友誼:
class Friendship < ActiveRecord::Base
belongs_to :user
belongs_to :friend, class_name: 'User'
end
錯誤我試圖解決方案:
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "friends_friends_of_friends_join"
LINE 1: ...ndships" "friendships_friends_of_friends_join" ON "friends_f...
^
: SELECT "users".* FROM "users" INNER JOIN "user_cities" ON "user_cities"."user_id" = "users"."id" INNER JOIN "cities" ON "cities"."id" = "user_cities"."city_id" INNER JOIN "friendships" ON "users"."id" = "friendships"."friend_id" INNER JOIN "friendships" "friendships_friends_of_friends_join" ON "friends_friends_of_friends_join"."id" = "friendships_friends_of_friends_join"."friend_id" WHERE "friendships"."user_id" = $1 AND "friendships_friends_of_friends_join"."user_id" = $2 AND "cities"."name" = 'London' LIMIT 1 OFFSET 0
Rendered search/index.html.erb within layouts/application (8.4ms)
Completed 500 Internal Server Error in 27ms
ActionView::Template::Error (PG::UndefinedTable: ERROR: missing FROM-clause entry for table "friends_friends_of_friends_join"
LINE 1: ...ndships" "friendships_friends_of_friends_join" ON "friends_f...
^
: SELECT "users".* FROM "users" INNER JOIN "user_cities" ON "user_cities"."user_id" = "users"."id" INNER JOIN "cities" ON "cities"."id" = "user_cities"."city_id" INNER JOIN "friendships" ON "users"."id" = "friendships"."friend_id" INNER JOIN "friendships" "friendships_friends_of_friends_join" ON "friends_friends_of_friends_join"."id" = "friendships_friends_of_friends_join"."friend_id" WHERE "friendships"."user_id" = $1 AND "friendships_friends_of_friends_join"."user_id" = $2 AND "cities"."name" = 'London' LIMIT 1 OFFSET 0):