我正在开发一个应用程序,如果它还没有值,我需要用空值填充散列。@pet[] 包含 3 个哈希,每个应该有一个 :name、:age 和 :pet_type_id。这个变量的目的是用它来填充视图中的select_tags,如下:
<%= text_field_tag "pet[][name]", @pet_storage[t].name %>
<%= text_field_tag "pet[][age]", @pet_storage[t].age %>
<%= select_tag("pet[][pet_type_id]", options_from_collection_for_select(PetType.all, "id", "name", @pet_storage[t].pet_type_id), :prompt => 'Select a pet type') %>
这将为我的表单提供默认数据。如果默认数据不存在,我需要它只是空的(这就是为什么我试图用包含 name、age 和 pet_type_id 键的散列填充@pet_storage 和空字符串值。
这是我在控制器中使用的代码:
unless defined?(@pet_storage)
@pet_storage = Array.new
RecordsHelper::ALLOWED_PETS.times { |t| @pet_storage[t] = {name:'', age:'', pet_type_id:''}}
end
但是,我收到此错误
undefined method `name' for {:name=>"", :age=>"", :pet_type_id=>""}:Hash
Extracted source (around line #15):
12: <%= f2.label :age %>
13: <%= f2.label :pet_type_id, 'Type of pet'%>
14: </br>
15: <%= text_field_tag "pet[][name]", @pet_storage[t].name %>
16: <%= text_field_tag "pet[][age]", @pet_storage[t].age %>
17: <%= select_tag("pet[][pet_type_id]", options_from_collection_for_select(PetType.all, "id", "name", @pet_storage[t].pet_type_id), :prompt => 'Select a pet type') %>
18: </div>
为什么我不能将这些值保存在我的哈希中?有没有更好的方法来实现我想要做的事情?谢谢!