Rozwiązując inny problem natrafiłam na rozwiązanie problemu przedstawionego powyżej, wystarczyło użyć “object”, pewnie ma to jaką fachową nazwę
[code]
<%= @product.name %>
<%= @product.description %>
Opcje wyceny
<%= form_for @product, :url => { :controller => “cart”, :action => “add” } do |f| %>
<%= f.hidden_field :id %>
<%= f.hidden_field :name %>
<% f.fields_for :options do |b| %>
<div>
<%= b.label b.object.name %>
<%= b.hidden_field :name %>
<%= b.select :suboptionid, options_from_collection_for_select(b.object.suboptions, 'id', 'name') %>
</div>
<% end %>
<%= f.submit 'dodaj do koszyka'%>
<% end %>[/code]
Fajnie co?
<%= b.label b.object.name %>
<%= b.hidden_field :name %>
Przez .hidden_field przekazuje w params nazwę Opcji w celu późniejszego wykorzystania, no ale trzeba wyświetlić dla użytkownika jakiś label dla pola select, i tu był problem, a wystarczy użyć “b.object.name”.
To samo dla select:
<%= b.select :suboptionid, options_from_collection_for_select(b.object.suboptions, 'id', 'name') %>
aby przekazać kolekcje wystarczy “b.object.suboptions”.
Myślę ze takie rozwiązanie problemu jest ok, prościej i czytelniej już się chyba nie da.
Aha, dzięki za materiały, jak skończę z “bieganiem” to na pewno się zagłębię w nie