Remon Amin
Remon Amin

Reputation: 1548

select specific attributes from array rails

I have post model

class Post < ActiveRecord::Base
     acts_as_voteable
 end 

and Vote model

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

when I get the post voters with these method

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

I load my database how can I select only the user name and user id from these array?

update I changed my code I am using thumbs_up gem I pasted less code first to simplify the question

Upvotes: 2

Views: 4310

Answers (2)

Babur Ussenakunov
Babur Ussenakunov

Reputation: 1995

What do you mean by "load database"? If you want to select only id and name columns, then use @post.users.select([:id, :name]).each ...

Or is it about this problem (according to code that you provided)?

UPD.

voters_who_voted loads all voters and returns array https://github.com/bouchard/thumbs_up/blob/master/lib/acts_as_voteable.rb#L113. You have to add own association to Post model:

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

It's just example, perhaps voters will clash with already existing method, if any.

Then use it here instead of voters_who_voted

Upvotes: 1

AshwinKumarS
AshwinKumarS

Reputation: 1313

did you try collect method ??

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

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

If you want it to be related you can make a HASH with it. Id's mapped to the names.

Upvotes: 1

Related Questions