将模型记录分配给多个用户

时间:2014-12-06 00:38:25

标签: ruby-on-rails ruby

我正在使用rails应用程序,其中一项功能可让您向其他用户提供虚拟礼物。

一位用户将礼物(通过礼物模型)赠送给另一位用户。一个用户是赠送者(Gift.giver)另一个用户是接收者(Gift.receiver)

我的问题是我如何将每个礼物分配给两个用户,即送礼者和接收者,以便我以后可以调用User.gifts_received来获取用户收到的礼物列表,然后使用User.gifts_given获取用户提供的礼物清单?

使用User.gifts而不是User.gifts_received和User.gifts_given会更好吗?我计划使用acts_as_follower gem让用户看到他们关注的用户提供和接收的所有礼物。

在过去的应用中,当用户创建帖子时,该帖子属于我指定的那个用户:

@post.user = current_user

我怎样才能使用acts_as_follower gem获取另一位用户所关注的所有礼物?

2 个答案:

答案 0 :(得分: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允许您传入要在DB中查询的值数组(all_following返回)。

Acts as follower gem

Check this out了解更多信息。

答案 1 :(得分:0)

如果我是你,我会考虑将这些行为视为租户宝石:

Acts as Tenant Gem

此gem允许您根据帐户的内容设置范围和设置韧性,您可以找到与给定用户关联的所有礼物。