2010-06-04 57 views
0

有人能解釋一下下面的代碼示例 是什麼「專輯[photo_attributes] []」的意思 我發現這裏的代碼http://infrastacks.com/?p=57Rails的字段代碼示例

<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> 

回答

1

從字面上看,它是告訴Rails的結構將所有提交內容組合在一個哈希表中,以便一次一個地瀏覽它們。

所以在這種情況下,散列表'album [] []'是雙重索引的。通過不在第二項中加入明確的索引號(由[photo_attributes]之後的開放和封閉括號表示),rails知道使用該散列名稱(專輯)和第一個索引值(照片屬性)加入所有提交內容,一起放入一個散列表,其中與對象關聯的photo_attributes是一個數組。該數組中的每個條目都是一個散列,其索引爲: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

非常感謝:) – felix 2010-06-06 17:24:11