1

我有帖子模型

class Post < ActiveRecord::Base
     acts_as_voteable
 end 

和投票模型

class Vote < ActiveRecord::Base

 scope :for_voter, lambda { |*args| where(["voter_id = ? AND voter_type = ?", args.first.id, args.first.class.name]) }
  scope :for_voteable, lambda { |*args| where(["voteable_id = ? AND voteable_type = ?", args.first.id, args.first.class.name]) }
 scope :recent, lambda { |*args| where(["created_at > ?", (args.first || 2.weeks.ago)]) }
 scope :descending, order("created_at DESC")

  belongs_to :voteable, :counter_cache=>true,:polymorphic => true,:touch=>true
   belongs_to :voter, :polymorphic => true

  attr_accessible :vote, :voter, :voteable


 # Comment out the line below to allow multiple votes per user.
 validates_uniqueness_of :voteable_id, :scope => [:voteable_type, :voter_type, :voter_id]

end

当我用这些方法获得帖子选民时

  <% @post.voters_who_voted.each do |voter|%>
  <%= voter.name %>
   <% end %>

我加载我的数据库如何从这些数组中只选择用户名和用户 ID?

更新我更改了我的代码我正在使用 thumbs_up gem 我首先粘贴了更少的代码以简化问题

4

2 回答 2

1

“加载数据库”是什么意思?如果您只想选择 id 和 name 列,请使用@post.users.select([:id, :name]).each ...

还是关于这个问题(根据您提供的代码)?

UPD。

voters_who_voted加载所有选民并返回数组https://github.com/bouchard/thumbs_up/blob/master/lib/acts_as_voteable.rb#L113。您必须将自己的关联添加到Post模型:

has_many :voters, :through => :votes, :source => :voter, :source_type => 'User'

这只是一个例子voters,如果有的话,可能会与已经存在的方法发生冲突。

然后在这里使用它而不是voters_who_voted

于 2013-08-20T17:07:15.723 回答
1

你试过收集方法吗?

names = @post.users.collect(&:name)

ids = @post.user.collect(&:id)

如果你希望它是相关的,你可以用它做一个 HASH。Id 映射到名称。

于 2013-08-20T17:20:57.220 回答