代码示例的Rails字段

时间:2010-06-04 21:59:12

标签: ruby-on-rails ruby

有人可以解释以下代码示例 “album [photo_attributes] []”是什么意思 我在这里找到了这段代码http://infrastacks.com/?p=57

<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 个答案:

答案 0 :(得分: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.