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!
postez vos modèles s'il vous plaît – s84
vous avez des erreurs? – s84
Que vous dit '@ photo.land_uses.map (&: name)'? – Reactormonk