Так что я приношу свои извинения за то, как noobish могут возникнуть эти вопросы. Я новичок в рельсах, и в качестве первой задачи я также привел в Neo4J, поскольку он казался лучшим, если я вырасту проект.Создание отношений в модели Neo4J с after_save
Я объясню поток действий, а затем покажу пример кода. Сейчас я пытаюсь добавить шаг 3-5.
- Пользователь входит в систему с помощью FB
- Первый Войти создает пользовательский узел. Если пользователь существует, он просто извлекает этот пользователь + узел
- После создания пользовательского узла камень koala используется для доступа к графическому интерфейсу FB
- Получает список друзей каждого друга с помощью приложения.
- Пройтись каждым друг и добавить дружбу отношения два пути между двумя пользователями
В 3-5 нужно только произойдет, когда пользователь первым присоединяется, я думал, что я мог бы сделать это в методе, связанную с after_save
Перезвони. Существует недостаток этой логики, хотя мне нужно будет в какой-то момент обновить пользователя с дополнительными атрибутами, и он снова вызовет after_save. Могу ли я предотвратить это при обновлении?
SessionsController для справки
def create
user = User.from_omniauth(env["omniauth.auth"])
session[:user_id] = user.id
redirect_to root_url
end
def destroy
session.delete(:user_id)
redirect_to root_path
end
Так что в моем user.rb у меня есть что-то вроде этого
has_many :both, :friendships
after_save :check_friends
def self.from_omniauth(auth)
@user = User.where(auth.slice(:provider, :uid)).first
unless @user
@user = User.new
# assign a bunch of attributes to @user
@user.save!
end
return @user
end
def facebook
@facebook ||= Koala::Facebook::API.new(oauth_token)
block_given? ? yield(@facebook) : @facebook
rescue Koala::Facebook::APIError => e
logger.info e.to_s
nil
end
def friends_count
facebook { |fb| fb.get_connection("me", "friends", summary: {}) }
end
def check_friends(friendships)
facebook.get_connection("me", "friends").each do |friend|
friend_id = friend["id"]
friend_node = User.where(friend_id)
Friendship.create_friendship(user,friend_node)
return true
end
end
friendship.rb
from_class User
to_class User
type 'friendship'
def self.create_friendship(user,friend_node)
friendship = Friendship.create(from_node: user, to_node: friend_node)
end
Я не уверен, если я m на правильном пути с тем, как создать узел отношений. Поскольку я только что создал @user
, как мне включить это в мой метод check_friends
и так правильно получить пользовательский и дружеский узел, чтобы я мог связать их вместе.
Сейчас он не знает, что пользователь и friend_user являются узлами
Если вы видите другой плохой код практики, пожалуйста, дайте мне знать!
Заблаговременно: Спасибо за помощь @subvertallchris. Я уверен, что вы ответите на многие мои вопросы, подобные этому.
Hahaha! Вы смотрите в будущее! Это большой вопрос. Дайте мне несколько минут, чтобы набрать его. – subvertallchris
Также, не стесняйтесь, напишите мне, если вам когда-нибудь понадобится помощь, и не хотите размещать здесь по какой-либо причине. Я изучил Ruby, Rails и Neo4j в то же время, потому что это соответствовало моему проекту! – subvertallchris