0

现在我有这个

def index
  @trips = Trip.all
end

我正在输出这样的数据:

- @trips.order('created_at desc').first(4).each do |trip|
  - trip.trip_images.first(1).each do |image|
    = trip.title_name.titleize

但是,我有一个与旅行相关的投票表(来自acts_as_votable gem)。我想知道我是否只能输出行程有一定票数的行程?

我可以得到这样的选票:

- @trips.order('created_at desc').first(4).each do |trip|
  = trip.get_likes.size #this is where I can get the likes
  - trip.trip_images.first(1).each do |image|
    = trip.title_name.titleize

编辑

如果我这样做:

def index
  @votes = ActsAsVotable::Vote.where(votable_type: 'Trip').group(:votable_id).count
  @trips = Trip.where(@votes)
end

@votes给了我这样的东西:

{195=>1, 106=>1, 120=>1, 227=>1, 247=>1, 264=>1, 410=>1}

我如何在trip只会获得ID的地方获得它?

编辑 2

我想我想通了...

def index
  @votes = ActsAsVotable::Vote.where(votable_type: 'Trip').group(:votable_id).count
  @trips = Trip.where(id: @votes.keys)
end

我得到了某种输出。有没有更好的办法?

4

3 回答 3

0

您是否考虑过在您的Trip模型中使用此方法?

就像是,

def popular_trip_images
  Trip.select(:trip_images).where("likes > ?", 200)
end

然后使用类似的东西,

...
trip.popular_trip_images.each do |image|
...

编辑:

但是,我有一个与旅行相关的投票表(来自acts_as_votable gem)。我想知道我是否只能输出行程有一定票数的行程?

抱歉,错过了这部分。宝石有一种find_liked_items方法,但看不到如何设置诸如此类的东西liked > 400

于 2015-12-07T04:39:11.023 回答
0

昨天我回答了类似的问题

这就是您可以通过一定数量的投票获得旅行 id 的方式(您可以使用=,><=):

trip_ids = ActsAsVotable::Vote
  .where(votable_type: 'Trip')
  .group(:votable_id)
  .having('count(votable_id) > 1') #any number of votes
  .pluck(:votable_id)
  .uniq

Trip.where(id: trip_ids)
于 2015-12-07T07:10:53.533 回答
0

我一直在尝试处理评论,但现在,我已经让这段代码工作了:

def index
  @votes = ActsAsVotable::Vote.where(votable_type: 'Trip').group(:votable_id).count
  @votes = @votes.select {|k,v| v > 1}
  @trips = Trip.where(id: @votes.keys)
end

如果其他人可以提出更好的解决方案!我会标记为正确。

于 2015-12-07T07:37:53.407 回答