Problema con partial e collection passata

Chiedo venia per l’oggetto poco esplicativo.

Ho il seguente parziale:

<% fields_for “item[]” do |item| %>

  • <%= truncate(cart_items.description,60) %>
    <%= item.text_field('quantity', :size => '8') %>
    <%= link_to('RIMUOVI', :controller => 'cart', :action => 'remove_from_cart', :code => cart_items.product.codice) %>
  • <% end %>

    che chiamo da una view in questo modo:

    <% form_for :cart, @cart, :url => { :action => ‘cart_details’ } do
    |cart_form| %>

      <%= render :partial => 'cart_items', :collection => @cart_items %>
    <%= submit_tag("Aggiorna carrello") %>
    <% end %>

    Originariamente, il parziale non esisteva ed era integrato nel form di
    cui sopra, opportunamente incapsulato in un “for @item in @cart_items
    do…”.

    A seguito dell’introduzione del parziale, ogni volta che accedo alla
    view incriminata, rails mi restituisce l’errore:

    object[] naming but object param and @object var don’t exist or don’t
    respond to id_before_type_cast: nil

    Imputando lo stesso alla riga:

    <%= item.text_field(‘quantity’, :size => ‘8’) %>

    Ho provato a risolvere da solo ma proprio non ne vengo a capo.

    Dove sbaglio?

    Ringrazio in anticipo per il Vs aiuto.

    provo a risponderti

    richiamare un partial con una collection ha l’effetto di richiamarlo una
    volta per ogni elemento della collection, ovvero con:

    <%= render :partial => ‘cart_items’, :collection => @cart_items %>

    _cart_items.rhtml viene richiamato per ciascun elemento di @cart_items
    che viene messo a disposizione del partial nella variabile cart_items

    quindi:

    Carmine M. wrote:

    <% fields_for “item[]” do |item| %>

    non hai un oggetto “item” e appena tenti di usarlo hai l’errore

  • <%= truncate(cart_items.description,60) %>
  • questa funziona!

    <%= item.text_field('quantity', :size => '8') %>
    <%= link_to('RIMUOVI', :controller => 'cart', :action => 'remove_from_cart', :code => cart_items.product.codice) %>
    <% end %>

    prova cosi:

    <% fields_for “cart_items[]” do |item| %>

    ciao,
    Luca

    Web: http://spazidigitali.com - http://thetyper.com
    Email mailto://[email protected]
    Skype callto://l.mearelli

    Ciao Luca,

    Luca M. wrote:

    richiamare un partial con una collection ha l’effetto di richiamarlo una
    volta per ogni elemento della collection, ovvero con:

    Si, il comportamento del partial con la collection mi è chiaro

    quindi:

    Carmine M. wrote:

    <% fields_for “item[]” do |item| %>

    non hai un oggetto “item” e appena tenti di usarlo hai l’errore

    Ma l’oggetto “item” non viene definito da fields_for (form builder)?

  • <%= truncate(cart_items.description,60) %>

    questa funziona!

    Si, infatti, l’errore mi viene segnalato sulla riga dove viene
    manipolata la quantità .

    prova cosi:

    <% fields_for “cart_items[]” do |item| %>

    Ho già provato così, purtroppo non và nemmeno in questo modo :expressionless:
    E’ pur vero che l’ho fatto di fretta prima di andare a lavoro.

    Rifaccio un pò di prove ed accodo al post.

    Grazie per l’aiuto

  • A quanto pare, ho risolto.

    <% fields_for “cart_items[]” do |item| %>

    Come già accennato, con il codice esposto mi ritorna comunque errore.
    Per risolvere è bastato scrivere:

    <% fields_for “item[]”, cart_items do |item| %>

    Il “cart_items” è quello che fornisce l’appoggio a fields_for.
    A “cart_items” viene passata la collezione omonima per mezzo di
    :collection nella chiamata al parziale.

    Purtroppo per me, quello di aggiungere “cart_items” alla chiamata a
    fields_for è stato più un tentativo disperato, che qualcosa dettato
    dalla conoscenza del framework. :frowning: