私はアプリケーションに取り組んでおり、ハッシュにまだ値がない場合は、空の値を入力する必要があります。@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') %>
これにより、フォームのデフォルト データが提供されます。デフォルトのデータが存在しない場合は、それを空にする必要があります (そのため、空の文字列値を持つ名前、年齢、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>
これらの値をハッシュに保存できないのはなぜですか? 私がやろうとしていることを達成するためのより良い方法はありますか? ありがとう!