Richiamare value da db

Okey, ho risolto i vari confronti, aggiungendo un controllo in più sulla
riga ottenendo questo:

def create
@ordine = current_ordine
@prodotto = elemento_params[:prodotto_id]
@taglia = elemento_params[:taglia]
if ( current_ordine.elementi.collect { |x| x.prodotto_id.to_s ==
@prodotto and x.taglia == @taglia }.include?(true) ) == true
nil
else
@ordine = current_ordine
@elemento = @ordine.elementi.new(elemento_params)
@ordine.save
session[:ordine_id] = @ordine.id
end
end

Adesso la domanda da un milione di dollari,

se il confronto mi restituisce true, in entrambi i casi. Vorrei che
aggiornasse la quantità, sommandola alla nuova quantità. Come posso
passarli l’id del elemento da aggiornare???

where(prodotto_id: @prodotto, …

Credo che si debba usare o prodotto: @prodotto, o prodotto_id: @ prodotto.id

E poi vab elemento.quantita anzich elemento.quanita

Maurizio De Santis

Il giorno 16 giugno 2015 11:56, Andrea P. [email protected] ha
scritto:

a occhio, una cosa dele genere potrebbe funzionare, magari necessita di
qualche aggiustamento:

def create
@ordine = current_ordine
@prodotto = elemento_params[:prodotto_id]
@taglia = elemento_params[:taglia]

elementi = @ordine.elementi.where(prodotto_id: @prodotto, taglia:
@taglia)

if elementi.any?
elementi.each {|elemento| elemento.quanita += 1 }
else
@elemento = @ordine.elementi.new(elemento_params)
end

@ordine.save
session[:ordine_id] = @ordine.id
end

ciao,
A.

@prodotto and x.taglia == @taglia }.include?(true) ) == true

[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml

Andrea P. wrote in post #1175117:

a occhio, una cosa dele genere potrebbe funzionare, magari necessita di
qualche aggiustamento:

def create
@ordine = current_ordine
@prodotto = elemento_params[:prodotto_id]
@taglia = elemento_params[:taglia]

elementi = @ordine.elementi.where(prodotto_id: @prodotto, taglia:
@taglia)

if elementi.any?
elementi.each {|elemento| elemento.quantita += 1 }
else
@elemento = @ordine.elementi.new(elemento_params)
end

@ordine.save
session[:ordine_id] = @ordine.id
end

ciao,
A.

@prodotto and x.taglia == @taglia }.include?(true) ) == true

[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


http://andreapavoni.com

Ciao Andrea, grazie della risposta.

Purtroppo se deve aggiornare la quantità mi da errore dalla view

Completed 500 Internal Server Error in 21ms (ActiveRecord: 0.8ms)

ActionView::Template::Error (undefined method errors' for nil:NilClass): 1: <% if @ordine.errors.any? || @elemento.errors.any? %> 2: alert("Forse hai dimenticato la taglia.") 3: <% else %> 4: $(".cart-text").html("<%= escape_javascript(render 'layouts/cart_text') %>") app/views/elementi/create.js.erb:1:in _app_views_elementi_create_js_erb__942071983__636025238’

esatto, scrivendo di corsa ci sono scappati un paio di typos. comunque
spero di aver reso lidea :slight_smile:

ciao,
A.

@prodotto = elemento_params[:prodotto_id]

Okey, ho risolto i vari confronti, aggiungendo un controllo in pi sulla
@ordine = current_ordine
se il confronto mi restituisce true, in entrambi i casi. Vorrei che

Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml

Maurizio De Santis wrote in post #1175138:

Perch la variabile @elemento non definita nel caso in cui elementi.any?
sia true; dovresti definirla anche in quel caso

Maurizio De Santis

Il giorno 16 giugno 2015 16:12, Xx Xx [email protected] ha scritto:

scusa l’ignoranza, potresti spiegarti meglio?
In che senso dovrei definirla?

Perch la variabile @elemento non definita nel caso in cui elementi.any?
sia true; dovresti definirla anche in quel caso

Maurizio De Santis

Il giorno 16 giugno 2015 16:12, Xx Xx [email protected] ha scritto:

Nella vista hai @elemento.errors.any? ; quando @elemento non definito
nel
controller il suo valore nil, per cui avrai nil.errors che chiama il
metodo errors su nil, e quindi d errore.

Nel controller hai

if elementi.any?
elementi.each {|elemento| elemento.quanita += 1 }
else
@elemento = @ordine.elementi.new(elemento_params)
end

per cui quando elementi.any? true @elemento non viene definito, dando
luogo all’errore. Dovresti dare un valore coerente ad @elemento anche in
quel caso, oppure nella vista controllare che @elemento sia definito
prima
di chiamare @elemento.errors.

Maurizio De Santis

Il giorno 16 giugno 2015 16:35, Xx Xx [email protected] ha scritto:

Quindi, richiamando elementi.any? ottengo true che e un valore nil,
giusto?

true non un valore nil O.o quando parlavo di nil intendevo il codice
nella vista, cio @elemento.errors.any? , nello specifico
@elemento.errors
; il metodo .any? non viene neanche chiamato dato che l’errore gi in
@elemento.errors , essendo @elemento nil. Mi sa che stai facendo
confusione
:slight_smile:

Maurizio De Santis

2015-06-16 17:04 GMT+02:00 Xx Xx [email protected]:

Quindi, richiamando elementi.any? ottengo true che e un valore nil,
giusto?

Quindi dovrei definire quel nil?

@elemento.errors , essendo @elemento nil. Mi sa che stai facendo
confusione
:slight_smile:

Eh, si. Il tunnel e ancora buio :frowning:

Xx Xx wrote in post #1175147:

@elemento.errors , essendo @elemento nil. Mi sa che stai facendo
confusione
:slight_smile:

Eh, si. Il tunnel e ancora buio :frowning:

Questo significa, che non sa quale elemento aggiornare?!

Dato che non gli viene passato un id, di un elemento, giusto?

Dato l’approccio botta e risposta, consiglio vivamente di creare un
repository Github.
Xx Xx: hai un account di messaggistica che usi? Così ti aiuto
velocemente a
configurare il repository :slight_smile:

2015-06-16 18:26 GMT+02:00 Maurizio De Santis
[email protected]:

Concordo col mio omonimo, altrimenti qua non ne usciamo più :smiley:

Il giorno mar 16 giu 2015 23:40 maurizio de magnis <
[email protected]> ha scritto:

Se nella vista richiama @elemento.errors ed @elemento nil d errore, e
questo errore scaturisce nel momento in cui non definisci @elemento nel
controller… ci siamo?

Maurizio De Santis

2015-06-16 17:18 GMT+02:00 Xx Xx [email protected]:

2015-06-16 23:41 GMT+02:00 Maurizio De Santis
[email protected]:

k1ra

Quindi, richiamando elementi.any? ottengo true che e un valore nil,
giusto?

Maurizio De Santis

; il metodo .any? non viene neanche chiamato dato che l’errore gi in
@elemento.errors , essendo @elemento nil.

quindi, non riesce a puntare all’elemento, dato che non gli passo l’id

elementi = @ordine.elementi.where(prodotto_id: @prodotto, taglia:
@taglia)

Ma stando a questa porzione di codice, dovrebbe puntarlo lo stesso,
anche senza id, giusto?

Xx Xx wrote in post #1175144:

Quindi, richiamando elementi.any? ottengo true che e un valore nil,
giusto?

Quindi dovrei definire quel nil?

Questa non e’ esattamente una lacuna e ti consiglerei di passare ad
esercizi in ruby. Solo dopo dovresti passare a rails e questo a mio
avviso e’ il motivo delle tue difficoltà.

Ti aiuterei ma purtroppo non è chiaro il problema e non ho potuto
leggere tutto per capirlo.

Marco M. wrote in post #1175320:

Xx Xx wrote in post #1175144:

Quindi, richiamando elementi.any? ottengo true che e un valore nil,
giusto?

Quindi dovrei definire quel nil?

Questa non e’ esattamente una lacuna e ti consiglerei di passare ad
esercizi in ruby. Solo dopo dovresti passare a rails e questo a mio
avviso e’ il motivo delle tue difficoltà.

Ti aiuterei ma purtroppo non è chiaro il problema e non ho potuto
leggere tutto per capirlo.

Ciao Marco ^^

qui puoi vedere la parte che mi da l’errore (oramai sono certo quale sia
l’errore). Mentre qui…

trovi il progetto che sono andato a “modificare” (lo solamente tradotto
:P)

in pratica, il mio obbiettivo e impedire la creazione di oggetti
multipli.
In pratica permetto la creazione di un elemento (max 1 prodotti, con 3
taglie diverse, quindi tre prodotti uguali con taglie diverse).

Poi in caso il prodotto e la taglia sono uguali, voglio sommare la nuova
quantità con quella vecchia.

Sono riuscito a fare i vari confronti (max 1 prodotti, con 3 taglie
diverse, quindi tre prodotti uguali con taglie diverse), ma non riesco a
puntare l’elemento specifico a qui sommare la quantità ^^