2014-12-06 3 views
1

Я работаю над приложением rails, и одна из функций позволяет вам давать виртуальные подарки другим пользователям.Присвоение модели reccord нескольким пользователям

Один пользователь дает подарок (через модель подарка) другому пользователю. Один пользователь - получатель (Gift.giver). Другим пользователем является приемник (Gift.receiver)

Мой вопрос: как я могу назначить каждый подарок двум пользователям, дарителям и получателям, чтобы я мог позже вызвать User.gifts_received, чтобы получить список подарков, полученных пользователем, и User.gifts_given, чтобы получить список подарков, которые дал пользователь?

Лучше просто использовать User.gift вместо User.gifts_received и User.gifts_given? Я планирую использовать act_as_follower gem, чтобы пользователи могли видеть все подарки, полученные и полученные пользователями, которых они придерживаются.

В прошлых программах, когда пользователь создал должность, пост принадлежал к одному пользователю, который я присвоенный с:

@post.user = current_user 

И как я мог бы использовать acts_as_follower gem, чтобы получить все подарки, что один пользователь что другой пользователь следует?

ответ

1

Я предполагаю, что ваш подарок модель выглядит примерно так:

gift.rb

class Gift < ActiveRecord::Base 
    belongs_to :giver, class_name: 'User' 
    belongs_to :receiver, class_name: 'User' 

    ... 
end 

Так, чтобы сделать это, вам нужно будет сделать вашу модель пользователя выглядеть примерно так, с acts_as_follower материал добавил:

user.rb

class User < ActiveRecord::Base 
    has_many :given_gifts, class_name: 'Gift', foreign_key: 'giver_id' 
    has_many :received_gifts, class_name: 'Gift', foreign_key: 'receiver_id' 

    acts_as_followable 
    acts_as_follower 

    ... 
end 

Вы должны это быть частью подарка миграции:

f.integer :receiver_id 
f.integer :giver_id 

Что дает вам доступ к этим методам при присваивании:

giver = User.first 
receiver = User.last 
gift = Gift.create(giver: giver, receiver: receiver) 
gift.giver => giver 
gift.receiver => receiver 
giver.given_gifts => [gift] 
receiver.received_gifts => [gift] 

И acts_as_follower методы (с помощью переменных выше):

giver.follow(receiver) 
Gift.where(receiver_id: giver.all_following.pluck(:id)) => [gift] 

where позволяет передавать в массив значений значение qu (в результате возвращается all_following).

Acts as follower gem.

Check this out для получения дополнительной информации.

+0

Благодарим вас soooooooooooooooooo много !!:))) Как бы я использовал act_as_follower gem, чтобы показать подарки, полученные и полученные всеми вами пользователями? https://github.com/tcocca/acts_as_follower –

+1

Выполняет ли один пользователь другого пользователя? Или есть отдельный класс, следующий за пользователями? –

+0

Один пользователь следует за другим пользователем. Каждый пользователь следит за рядом других пользователей, таких как Twitter. –

0

Если бы я был вами, я бы рассмотреть вопрос об использовании выступает в качестве арендатора самоцвета:

Acts as Tenant Gem

Этого камень позволяет размах и установить живучесть поэтому, в зависимости от того, что учетной записи, вы можете найти все подарки связанных с данным пользователем.

Смежные вопросы