2010-06-04 3 views
0

Quelqu'un peut-il expliquer l'exemple de code suivant qu'est-ce que "l'album [photo_attributes] []" signifie J'ai trouvé ce code ici http://infrastacks.com/?p=57Rails champs Pour exemple de code

<div class="photo"> 
<% fields_for "album[photo_attributes][]", photo do |p| %> 
    <p> 
    <%= p.label :Photo %><br /> 
    <%= p.file_field :data, :index => nil %> 
    <%= link_to_function "delete", "remove_field($(this), ('.photo'))" %> 
    </p> 
<% end %> 
</div> 

Répondre

1

Littéralement, il est une structure qui dit rails regrouper toutes les soumissions ensemble dans une seule table de hachage afin que vous puissiez les parcourir un à la fois. Dans ce cas, l'hashtable 'album [] []' est indexé deux fois. En ne mettant pas un numéro d'index explicite pour le deuxième élément dans le hachage (indiqué par les parenthèses ouvertes et fermées après [photo_attributes]), rails sait joindre toutes les soumissions avec ce nom de hachage (albums) et première valeur d'index (attributs photo) ensemble dans une table de hachage unique où l'objet photo_attributes associé est un tableau. Chaque entrée de ce tableau est un hachage avec une valeur à l'index: data.

## From the code on that page 
params[:album][:photo_attributes] 
#This turns out to be an array of hashes. Each hash has one key/value pair in it. The key is "data" and the value is the file information. Example: 
{"data"=>#<File:/var/folders/56/56dUsTxtHaKheeiHSoaE1++++TI/-Tmp-/CGI20081216-17582-14p6wd2-0>} 

params[:album][:photo_attributes].each { |p| p[:data] } # this is a loop that would get you the data for each photo submitted. 
+0

Merci beaucoup :) – felix