1

Je veux faire un contrôleur de vote générique pour beaucoup de contrôleurs différents. J'utilise la gemme Thumbs_up qui était auparavant la gemme vote_fu.classe polymorphe pour thumbs_up vote gem

https://github.com/kitop/thumbs_up/blob/master/lib/acts_as_voter.rb

Ma forme ressemble donc qui est une partie de l'objet @voteable:

<strong class="result">Votes: <%= voteable.votes_for - voteable.votes_against %></strong> 

<%= form_tag user_votes_path(current_user) do |f| %> 
    <%= radio_button_tag :thumb_direction, :up %> 
    <%= radio_button_tag :thumb_direction, :down %> 
    <%= hidden_field_tag :voteable, @voteable %> 
    <%= submit_tag :vote %> 
<% end %> 

Cependant, lorsque je tente passer l'objet voteable dans le contrôleur ne fonctionne pas directement.

méthode non définie BASE_CLASS' pour chaîne: Classe

Ma question est alors comment regarder polymorphically le même objet ... à savoir passer le voteable_type et _id au lieu de l'objet lui-même .. A moins qu'il y ait un autre moyen plus facile?

contrôleur ressemble à ce

def create 
    #@user = User.find(params[:user_id]) 
    current_user.vote(params[:voteable], :direction => params[:thumb_direction], :exclusive => true) 
    end 

#routes 

    resources :users do 
    resources :votes 
    end 

Répondre

3

a fait quelque chose comme ça

def create 
    voteable_class = params[:voteable_type].constantize 
    voteable_id = (params[:voteable_type].downcase + "_id").to_sym 
    voteable_instance = voteable_class.find(params[voteable_id]) 
    current_user.vote(voteable_instance, :direction => params[:thumb_direction], :exclusive => true) 
    redirect_to :back 
    end 

et ils ont changé mes itinéraires pour la ressource de vote imbriqué sur chaque modèle que je voulais l'utiliser.

erb

<%= form_tag [voteable, Vote.new] do |f| %> 
    <%= radio_button_tag :thumb_direction, :up %> 
    <%= radio_button_tag :thumb_direction, :down %> 
    <%= hidden_field_tag :voteable_type, voteable.class %> 
    <%= submit_tag :vote %> 
<% end %> 
Questions connexes