2010-11-07 11 views
0

Ceci est une question assez frustrante, mais je ne peux pas sembler obtenir l'itération des objets pour travailler dans mon projet de rails. J'ai deux modèles, "Photo" et "LandUse" qui ont tous deux une association has_and_belongs_to_many. Tout fonctionne comme prévu dans la console.Rails itération

Cependant, dans l'action de montrer la photo je ne peux pas sembler déchiffrer quel code produirait une liste des utilisations de terrain associées à la photo. Mon code ressemble à ceci:

<% for use in @photo.land_uses %> 
    <%= use.name %> 
<% end %> 

Cela ne produit aucune sortie. J'ai également essayé:

<% @photo.land_uses.each do |use| %> 
    <%= use.name %> 
<% end %> 

... et cela ne fonctionne pas non plus.

Dans la console si je tente quelque chose comme ceci:

photo = Photo.first 
photo.land_uses 

Je reçois une liste de toutes les utilisations des terres que la photo appartient, pas de surprises.

Alors, comment parcourir cette liste d'utilisations et imprimer le nom de chaque utilisation?

Je suis nouveau à Ruby, mais si j'essayais de faire la même chose en PHP est serait simple boucle foreach:

foreach($photo->land_uses as $use) { 
    echo $use->name; 
} 

Alors qu'est-ce que je manque ici?


Mise à jour: voici les modèles à la demande:

--photo modèle--

class Photo < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :transect 
    belongs_to :focus 
    has_and_belongs_to_many :land_uses 

    validates :caption, :presence => true 
    validates :place, :presence => true 
    validates :city, :presence => true 
    validates :country, :presence => true 



    has_attached_file :file, 
             :processors => [:watermark], 
             :styles => { :standard => "631x631>", 
                    :marked => { :geometry => "631x631>", :watermark_path => "#{Rails.root}/public/images/watermark.png", :position => 'Center' }, 
                    :thumbnail => "174x130#" 
                   }, 
             :storage => :s3, 
             :s3_credentials => "#{Rails.root}/config/s3.yml", 
             :path => ":user_id/:year/:month/:id/:style.:extension" 

    geocoded_by :location, :latitude => :lat, :longitude => :lng 

    after_validation :fetch_coordinates 

    def location 
     [place,city,state,country].delete_if{|val| val==''||nil}.join(', ') 
    end 
end 

- LANDUSE Modèle -

class LandUse < ActiveRecord::Base 
    has_and_belongs_to_many :photos 

    validates_uniqueness_of :name 
end 

RE : Messages d'erreur ... Je ne comprends pas un message d'erreur avec le pour ou chaque approche, je viens d'obtenir un espace vide où il devrait y avoir une liste des utilisations des terres.

Merci!

+0

postez vos modèles s'il vous plaît – s84

+0

vous avez des erreurs? – s84

+0

Que vous dit '@ photo.land_uses.map (&: name)'? – Reactormonk

Répondre

0

Comment embarrassant ...

J'ai trouvé le problème. Mes deux solutions originales pour l'impression du nom de l'utilisation des terres ont bien fonctionné. Le problème était que je n'avais pas correctement classé les données, donc les photos que je testais n'avaient aucune utilisation de terrain sauvegardée (donc pas de message d'erreur mais pas de contenu non plus). Correction du fichier de départ et des rendus de la vue comme prévu.

Merci d'avoir regardé.