Question de newbie

Salut à tous,
J´ai 3 tables:
Images(id,name,dirid) #dirid est la foreign key de Album.url, l´adresse
de
limage
Albums(id,url)
Tags(id,name)
ImagesTags(image_id,tag_id)

J´ai une relation has_and_belongs_to_many entre tags et images et une
relation belongs_to/has_many
entre albums et images (un album a plusieurs images, une image
appartient a
un seul album)
Dans mon views/tag/show.rhtml je voudrais afficher toutes les images
appartenant au tag en question et pour chaque image l´album auquel elle
appartient, voilà comment je fais:
<% for album in @albums %>
<% for image in @images %>
<% if @tag.images.include? image %>

<%=
show_image album.url+’/’+image.name %>
<% end %>
<% end %>

Le problème c´est que pour chaque image ça affiche tous les albums qui
existent dans la base au lieu dafficher l´unique album auquel chaque
image
appartient. Je suppose que je dois ajouter un objet dans dans mon
tag_controller.rb au niveau de la fonction show mais je ne sais pas trop
comment.

Merci d´avance

Pat

Salut Patrick,

a un seul album)
Dans mon views/tag/show.rhtml je voudrais afficher toutes les
images appartenant au tag en question et pour chaque image
l´album auquel elle appartient, voilà comment je fais:

D’après ce qui précède, tu itères d’abord sur les images et
pour chaque image, tu affiches l’album correspondant ou les
informations concernant l’album correspondant. Or d’après ce
qui suit, tu itères sur les albums et ensuite sur les images.

<% for album in @albums %>
<% for image in @images %>
<% if @tag.images.include? image %>

<%=
show_image album.url+’/’+image.name %>
<% end %>
<% end %>

il manque un <% end -%> dans ce code.
Il manque des détails, on a une idée sur la question mais
on ne sait pas ce que contient @albums ou @images.
Est-ce que tu veux qu’un album soit affiché, même s’il ne contient
aucune image avec le bon tag.

Le problème c´est que pour chaque image ça affiche
tous les albums qui existent dans la base au lieu dafficher
l´unique album auquel chaque image appartient. Je suppose
que je dois ajouter un objet dans dans mon tag_controller.rb
au niveau de la fonction show mais je ne sais pas trop comment.

Tu ne dis rien sur l’ordre d’apparition des albums ou des images.
Du coup, je suppose que ça importe peu et je propose
ça : (pseudocode)

contrôleur :

@tag = Tag.find(params[:id], :include => [ :image ])

vue :

<% @tag.images.group_by(&:dirid).each do |key,ary|
album = ary.first.album -%>
(affichage informations relatives à l’album)

<%= album.name %>
<% for img in ary -%>
(affichage d’une image)
<%= img.name %>

<% end -%>
<% end -%>

A+

-- Jean-François.

On 7/21/06, Jean-François [email protected] wrote:

informations concernant l’album correspondant. Or d’après ce
qui suit, tu itères sur les albums et ensuite sur les images.

oui en fait c´est ça que je veut faire donc le code devrait plutot
ressembler à ça:

<% for album in @images %>

<% for image in @albums %>
<% if @tag.images.include? image %>

<%=
show_image album.url+‘/’+image.name %><% end %>
<% end %>
<% end %>

et dans mon tags_controller j´ai ça:
def show
@tag = Tag.find(params[:id])
@albums = Album.find_all
@images = Image.find_all
end

Tu ne dis rien sur l’ordre d’apparition des albums ou des images.
Du coup, je suppose que ça importe peu et je propose
ça : (pseudocode)

contrôleur :

@tag = Tag.find(params[:id], :include => [ :image ])

Chaque image appartient à un seul album mais l´ordre d´affichage n´est
pas
important donc je pense que ça devrait aller.

vue :

<% end -%>
<% end -%>

A+

-- Jean-François.

Merci beaucoup! il faut que je teste chez moi d´abord parceque j´ai pas
le
net pour le moment.

Pat