2012-09-27 4 views
0

J'ai une méthode dans mon modèle principal, qui devrait renvoyer des valeurs spécifiques basées sur les params ensemble:Dynamiquement Définition des valeurs renvoyées

def self.retrieve_profiles(params) 

    case params[:view] 

    when 'image_only' 
     fields = %w{ avatar } 

    when 'profile_minimal' 
     fields = %w{ avatar username age } 

    when 'profile_medium' 
     fields = %w{ avatar username age first_name last_name bio relationship_status seeking } 

    when 'profile_extended' 
     fields = %w{ avatar username age first_name last_name bio relationship_status seeking country city photos } 

    end  

    profiles = Profile.that_has_photos 
    profiles = profiles.where(:country_id => params['country']) unless params['country'].nil?  
    profiles = profiles.order("RAND()").limit(params['count'])  

    # works fine up to here (returns all fields) 

    profiles.each do |a| 
    fields.each do |field| 
     puts a.eval(field) 
    end 
    end 

    # above block makes it fail (private method `eval' called) 

end 

Ma question est: comment puis-je retourner uniquement les valeurs spécifiées par le hachage fields ?

Répondre

3

Utilisez send au lieu de eval. Ce code devrait fonctionner correctement.

profiles.each do |a| 
    fields.each do |field| 
     puts a.send(field) 
    end 
    end 
Questions connexes