2012-05-09 6 views
1

J'ai un objet qui revient vide et est ici ce que je voudrais faireRuby/Rails - Tuyau double avec jeu de données vide

@photo = [] # this is coming back blank, but it won't do the correct comparison in the || 
@sanitized_photos = PhotoPresenter.new(@photo).to_json || PhotoPresenter.default_layout.to_json 

Toute réflexion sur la façon de le faire fonctionner sans costaud instruction if

MISE À JOUR ::: Voici une copie de mon présentateur qui fonctionne plutôt bien. Je sais que j'ai mis la logique de collection à l'intérieur ici, mais il fonctionne de la façon

class PhotoPresenter < Presenter 

    def initialize(photo) 
    @photo = photo 
    end 

    def to_gallery 
    { 
     "thumb" => @photo.image.url(:thumb), 
     "image" => @photo.image.url(:large), 
     "big" => @photo.image.url, 
     "title" => @photo.attachable.name 
    } 
    end 

    def self.blank_gallery 
    { 
     "thumb" => help.polymorphic_photo_url(nil, :large), 
     "image" => help.polymorphic_photo_url(nil, :large), 
     "big" => help.polymorphic_photo_url(nil, :large), 
     "title" => "No photo provided" 
     } 
    end 

    def self.as_gallery(photos) 
    unless photos.blank? 
     photos.collect{|object| self.new(object).to_gallery}.to_json 
    else 
     blank_gallery.to_json 
    end 
    end 

end 
+0

Quel est le problème avec l'ajout d'une classe méthode qui retourne 'default_layout' si la liste de photos est vide? Ensuite, vous pourriez 'PhotoPresenter.x (@photo) .to_json'. –

+0

mu est trop court. Je ne suis pas sûr de suivre la différence sur ce que j'ai fait avec l'as_gallery. Doit manquer quelque chose. Vous voulez juste définir quelque chose dans l'initialisation pour retourner le blank_gallery. Pourriez-vous éventuellement répondre à la question avec un exemple. Ensuite, je pourrais accepter la réponse si c'est super génial :) Je fais ça maintenant. PhotoPresenter.as_gallery (@photos) et il retournera la valeur par défaut si l'ensemble est vide. C'est ce que vous vouliez dire? – bokor

+0

Oui, je pense que votre 'as_gallery' est ce à quoi je pensais. Poussez la logique dans le modèle de sorte que vous ne devez vous inquiéter à ce sujet en un seul endroit. –

Répondre

0
@sanitized_photos = @photo.any? ? PhotoPresenter.new(@photo).to_json : PhotoPresenter.default_layout.to_json 

plus propre Cela étant dit, vous êtes beaucoup mieux de déplacer cette logique dans PhotoPresenter classe initialiseur

+0

Yuriy, je travaille actuellement comme vous l'avez là-bas. Avez-vous loin de le faire sans la condition si. J'essaye de comprendre comment faire ceci dans mon présentateur mais n'ai pas encore un bon moyen de faire fonctionner le code. Je peux refactoriser plus tard ... Merci! – bokor

+0

Pouvez-vous partager votre code de présentateur? –

+0

J'ai créé une méthode de classe dans mon présentateur ... édité ci-dessus – bokor

Questions connexes