2013-08-20 9 views
1

J'ai modèle postsélectionner des attributs spécifiques des rails de tableau

class Post < ActiveRecord::Base 
    acts_as_voteable 
end 

et modèle Votez

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 

quand je reçois les électeurs post avec ces méthodes

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

je charge ma base de données comment puis-je sélectionner uniquement le nom d'utilisateur et l'ID utilisateur de ce tableau?

mise à jour j'ai changé mon code J'utilise bijou thumbs_up Je collais moins de code premier à simplifier la question

+0

Un électeur peut être n'importe quel utilisateur (pas seulement l'utilisateur à qui le poste appartient?) – dax

+0

l'utilisateur est l'électeur qui a voté pour le poste –

+1

mise à jour de réponse. Jetez un oeil au code source de cette gemme. Il peut être utile –

Répondre

1

Que voulez-vous dire par « base de données de charge »? Si vous souhaitez sélectionner uniquement les colonnes id et name, utilisez @post.users.select([:id, :name]).each ...

Ou est-ce à propos de this problem (selon le code que vous avez fourni)?

UPD.

voters_who_voted charge tous les électeurs et renvoie le tableau https://github.com/bouchard/thumbs_up/blob/master/lib/acts_as_voteable.rb#L113. Vous devez ajouter propre association à Post modèle:

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

Il est par exemple juste, peut-être entrer en conflit avec voters va méthode déjà existante, le cas échéant.

utiliser ensuite ici au lieu de voters_who_voted

+0

désolé c'était une faute de frappe également sélectionner la méthode avec votre code me donne ArgumentError: faux nombre d'arguments (1 pour 0) –

+1

On dirait que @ post.users retourne tableau au lieu de l'objet ActiveRecord :: Relation. Peut-être qu'il a déjà été chargé avant? Vous devez vérifier le code de votre contrôleur et afficher le code au dessus de cette partie ou le poster ici –

+0

produit et array II mettra à jour mon code –

1

avez-vous essayé de recueillir la méthode ??

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

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

Si vous voulez qu'il soit lié, vous pouvez faire un HASH avec lui. Id est mappé aux noms.

+0

Utilisez @ @ post.users.pluck (: name) 'dans cette situation – MrYoshiji

+0

Je suppose que la différence est épousée directement interroge uniquement ce champ particulier et collecter collectera à partir de la ligne entière de données. avoir @ post.users dans une variable et collecter fera une seule requête à la db au lieu de deux, puisque nous avons besoin de nom et d'id. – AshwinKumarS

Questions connexes