Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 检索用户关注的所有用户的帖子-rails-ActiveRecord_Ruby On Rails_Ruby_Rails Activerecord - Fatal编程技术网

Ruby on rails 检索用户关注的所有用户的帖子-rails-ActiveRecord

Ruby on rails 检索用户关注的所有用户的帖子-rails-ActiveRecord,ruby-on-rails,ruby,rails-activerecord,Ruby On Rails,Ruby,Rails Activerecord,我有一个简单的rails应用程序,用户可以互相赠送虚拟礼物。每件礼物都属于两个使用者,送礼者和接收者 在myUser.rb中 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 bel

我有一个简单的rails应用程序,用户可以互相赠送虚拟礼物。每件礼物都属于两个使用者,送礼者和接收者

在myUser.rb中

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
belongs_to :giver, class_name: 'User'
belongs_to :receiver, class_name: 'User'
class Gift < ActiveResource::Base

...

def self.all_gifts(user_id)
  follower_ids = User.find(user_id).following_users.pluck(:id)
  Gift.where('giver_id in (?) OR receiver_id in (?)', follower_ids, follower_ids).uniq
end

...
在我的礼物中.rb

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
belongs_to :giver, class_name: 'User'
belongs_to :receiver, class_name: 'User'
class Gift < ActiveResource::Base

...

def self.all_gifts(user_id)
  follower_ids = User.find(user_id).following_users.pluck(:id)
  Gift.where('giver_id in (?) OR receiver_id in (?)', follower_ids, follower_ids).uniq
end

...
我正在使用允许用户跟踪其他用户,并查看他们跟踪的用户赠送和收到的礼物列表

在我的控制器中:

id = current_user.id
@given_gifts = User.find(id).following_users.includes(:given_gifts).collect{|u| u.given_gifts}.flatten

@received_gifts = User.find(id).following_users.includes(:received_gifts).collect{|u| u.received_gifts}.flatten

@gifts = @given_gifts.zip(@received_gifts).flatten.compact
id = current_user.id
Gift.all_gifts(id).paginate # any paginate attributes
我肯定我做得很不对。这给了我一张礼物的清单,还有一些重复的,它们都坏了我如何有效地获取任何给定用户遵循的所有用户赠送和收到的礼物的列表,这样就没有重复的礼物,它们都是有序的,这样我就可以对结果进行分页了?


如果作为一个用户,我在跟踪用户X和用户Y,用户X给了用户Y一份礼物,在我的提要中,我只想看到一次提到这件事,而不是两次提到同一件礼物

在Rails 4和关联(不是gem)上测试了这一点。这将提供由以下地址创建的不同礼品记录:-

@gifts=User.find(id)。跟随用户。加入(:收到的礼物,:给予的礼物)。选择('DISTINCT gifts.*'))


此外,根据,我认为您应该使用followers\u scoped而不是followers以获得Arel范围而不是元素数组

我将在我的礼物模型中创建一个自定义方法,尝试以下操作:

gift.rb

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
belongs_to :giver, class_name: 'User'
belongs_to :receiver, class_name: 'User'
class Gift < ActiveResource::Base

...

def self.all_gifts(user_id)
  follower_ids = User.find(user_id).following_users.pluck(:id)
  Gift.where('giver_id in (?) OR receiver_id in (?)', follower_ids, follower_ids).uniq
end

...
假设ID为1、2和3的用户跟随该用户。您应该能够在控制器中按如下方式对这些结果进行分页:

id = current_user.id
@given_gifts = User.find(id).following_users.includes(:given_gifts).collect{|u| u.given_gifts}.flatten

@received_gifts = User.find(id).following_users.includes(:received_gifts).collect{|u| u.received_gifts}.flatten

@gifts = @given_gifts.zip(@received_gifts).flatten.compact
id = current_user.id
Gift.all_gifts(id).paginate # any paginate attributes

如何检索收到的礼物和收到的礼物?@received\u gifts=User.find(id)。跟随\u用户。加入(:received\u gifts)。再次选择('gifts.*)谢谢,但我认为您可能误解了我的问题。您的回答显示了我如何检索:received_gifts,但我正在尝试检索:received_gifts和:Gived_gifts。如何,@gifts=User.find(id)。以下_用户。加入(:received_gifts,:Gived_gifts)。再次选择(:DISTINCT gifts.*)谢谢,但这会给我一个用户列表,而不是礼物:(非常感谢!!现在我收到了错误消息:未定义的局部变量或方法'id'。#突出显示的行是:follower_id=User.find(id)。follower_users.pulk(:id)我刚刚将方法中的参数从User_id更改为id,它现在可以工作了!你是AmaaaAzing!!!有什么方法可以给你更多的分数吗!!!?:)))