Forum: Italian Ruby user group richiamare value da db

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-06 10:20
Ciao, rieccomi qui con un nuovo gratta capo.
Sto cercando di confrontare dei dati pronti per essere salvati nel db
con alcune value di una tabella precisa.

In modo da evitare dei doppioni.

https://richonrails.com/articles/building-a-shoppi...
Seguendo questa guida, ho costruito il mio carrello, ma in fase di
creazione di OrderItem, ogni volta che si procedere ad aggiungere, si
creano nuovi OrderItem, tutti uguali (se non cambi la quantità).

Io ora vorrei impredire che questo accada, aumentando solo la quantità
se il product_id e uguale al product_id presente nel db.

Qualche consiglio?
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-06-06 16:22
(Received via mailing list)
Scusa ma qual' il problema? Quale difficolt hai nell'implementarlo?

--

Maurizio De Santis

Il giorno 6 giugno 2015 10:20, Xx Xx <darkslipknot@msn.com> ha scritto:
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-06 16:29
Grazie, Paolo Perego per la risposta. (Stranamente sul forum, non
visualizza nulla, vabbé...)

--------------------------------------------------------------------------

Allora, serve un controller:

Questo e il controller dei carrelli (nel tut, si chiama Order)

class CarrelliController < ApplicationController
  def show
    @elementi = current_ordine.elementi
  end
end

mentre questo e il OrderItem:

class ElementiController < ApplicationController
  def create
    @ordine = current_ordine
    @elemento = @ordine.elementi.new(elemento_params)
    @taglia = doppioni
    @ordine.save
    session[:ordine_id] = @ordine.id
  end

  def update
    @ordine = current_ordine
    @elemento = @ordine.elementi.find(params[:id])
    @elemento.update_attributes(elemento_params)
    @elementi = @ordine.elementi
  end

  def destroy
    @ordine = current_ordine
    @no_elementi = current_ordine_destroy
    @elemento = @ordine.elementi.find(params[:id])
    @elemento.destroy
    @elementi = @ordine.elementi
  end
private
  def elemento_params
    params.require(:elemento).permit(:taglia, :quantita, :prodotto_id)
  end
end

--------------------------------------------------------------------------
questo e il modello del controller carrello:

class Ordine < ActiveRecord::Base
  belongs_to :stato_ordine

  has_many :elementi

  before_create :set_stato_ordine

  before_save :update_subtotal

  def subtotal
    elementi.collect { |oi| oi.valid? ? (oi.quantita * oi.unit_price) :
0 }.sum
  end
private
  def set_stato_ordine
    self.stato_ordine_id = 1
  end

  def update_subtotal
    self[:subtotal] = subtotal
  end
end

--------------------------------------------------------------------------
questo e il metodo Elemento

class Elemento < ActiveRecord::Base
  belongs_to :prodotto
  belongs_to :ordine

  validates :quantita, presence: true, numericality: { only_integer:
true, greater_than: 0 }

  validate :prodotto_presente
  validate :ordine_presente

  before_save :finalize

  def unit_price
    if persisted?
      self[:unit_price]
    else
      prodotto.prezzo
    end
  end

  def total_price
    unit_price * quantita
  end

private
  def prodotto_presente
    if prodotto.nil?
      errors.add(:prodotto, "...non valido.")
    end
  end

  def ordine_presente
    if ordine.nil?
      errors.add(:ordine, "Non e un ordine valido.")
    end
  end

  def finalize
    self[:unit_price] = unit_price
    self[:total_price] = quantita * self[:unit_price]
  end
end

--------------------------------------------------------------------------
questo e il mio schema

  create_table "elementi", force: :cascade do |t|
    t.decimal  "unit_price",  precision: 12, scale: 3
    t.integer  "quantita"
    t.text     "taglia"
    t.decimal  "total_price", precision: 12, scale: 3
    t.integer  "prodotto_id"
    t.integer  "ordine_id"
    t.datetime "created_at",                           null: false
    t.datetime "updated_at",                           null: false
  end

  add_index "elementi", ["ordine_id"], name:
"index_elementi_on_ordine_id"
  add_index "elementi", ["prodotto_id"], name:
"index_elementi_on_prodotto_id"

--------------------------------------------------------------------------
e le routs:

  resources :payment_notifications
  resources :elementi, only: [:create, :update, :destroy]
  resource :carrelli, only: [:show]
  resources :categorie
  resources :prodotti
  resource :ordine

ecco qui, credo di non aver dimenticato nulla ^_^
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-06 16:40
Maurizio De Santis wrote in post #1174675:
> Scusa ma qual' il problema? Quale difficolt hai nell'implementarlo?
>
> --
>
> Maurizio De Santis
>
> Il giorno 6 giugno 2015 10:20, Xx Xx <darkslipknot@msn.com> ha scritto:

Il mio obbiettivo e quello di impedire la creazione di tanti elementi
tutti uguali...
Esempio:

Trovo il prodotto e lo aggiungo, olé tutto okey.
Trovo un altro prodotto e lo aggiungo, ancora tutto okey.
Ora mi sono reso conto che voglio aggiungere ancora il primo prodotto
che ho inserito in precedenza, con l'obbiettivo di aumentare la
quantita'

(dato che il prodotto_id e già inserito e con lui e stato creato anche
l'elemento.)

Solo che ogni volta che clicchi sullo stesso tasto di "Aggiungi
all'carrello", viene creato sempre un nuovo elemento.
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-09 15:44
Maurizio De Santis wrote in post #1174675:
> Scusa ma qual' il problema? Quale difficolt hai nell'implementarlo?
>
> --
>
> Maurizio De Santis
>
> Il giorno 6 giugno 2015 10:20, Xx Xx <darkslipknot@msn.com> ha scritto:

Ho provato a modificare il mio create in ElementiController, cosi:

def create
    @ordine = current_ordine

    if @ordine.elementi.collect { |x| x.prodotto_id == prodotto.id }
      @ordine = current_ordine
      @elemento = @ordine.elementi.find(4)
      @elemento.update_attributes(elemento_params)
      @elementi = @ordine.elementi

    else
      @ordine = current_ordine
      @elemento = @ordine.elementi.new(elemento_params)
      @ordine.save
      session[:ordine_id] = @ordine.id
    end
  end


Purtroppo la variabile prodotto.id, mi da errore, NameError (undefined
local variable or method `prodotto' for
#<ElementiController:0xb4d78804>)

:(
32d80da41830a6e6c1bb3eb977537e3e?d=identicon&s=25 Alessandro R. (alessandro_r)
on 2015-06-09 16:09
(Received via mailing list)
La butto l...fai riferimento a *prodotto* ma prodotto non esiste?

P.S.
Please don't code in Italian....:(

Alessandro Rodi
857c770ccb0a8e869994f663f09b22ec?d=identicon&s=25 Paolo P. (paolo_p)
on 2015-06-09 16:13
(Received via mailing list)
Tu usi la variabile prodotto nel metodo create ma non esiste quella
variabile.
Mi associo al don't code in Italian.

2015-06-09 16:08 GMT+02:00 Alessandro Rodi <coorasse@gmail.com>:
>> > Scusa ma qual' il problema? Quale difficolt hai nell'implementarlo?
>>     @ordine = current_ordine
>>       @ordine.save
>>
> http://lists.ruby-it.org/mailman/listinfo/ml
--
$ cd /pub
$ more beer

I pirati della sicurezza applicativa: https://codiceinsicuro.it
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-09 16:18
def create
    @ordine = current_ordine

    if ( @ordine.elementi.collect { |x| x.prodotto_id == prodotto.id
}.include?(true) ) == true
      @ordine = current_ordine
      @elemento = @ordine.elementi.find(4)
      @elemento.update_attributes(elemento_params)
      @elementi = @ordine.elementi

    else
      @ordine = current_ordine
      @elemento = @ordine.elementi.new(elemento_params)
      @ordine.save
      session[:ordine_id] = @ordine.id
    end
  end

ho modificato il mio create ulteriormente, cosi da ottenere true e
aggiornare invece di creare un nuovo elemento.
Solo che ora per farlo funzionare ho bisogno del id del prodotto, che mi
viene fornito dal url
myapp/prodotto/:id, ma non lo riceve l'id.

qualche consiglio?
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-09 17:09
Alessandro R. wrote in post #1174809:
> La butto l...fai riferimento a *prodotto* ma prodotto non esiste?
>
> P.S.
> Please don't code in Italian....:(
>
> Alessandro Rodi

Si che esiste, il create viene lanciato dalla pagina del prodotto (e
l'id e passato dal url), che a sua volta lancia il create dal
controller.

Io vorrei passare l'id che si trova nel url, al method create in
ElementiController
857c770ccb0a8e869994f663f09b22ec?d=identicon&s=25 Paolo P. (paolo_p)
on 2015-06-09 17:18
(Received via mailing list)
No, prodotto non  dichiarata altrimenti il tuo codice funzionerebbe :-)

L'id non viene passato per magia nei controller, ma devi leggerlo tra
i parametri (io uso sempre sinatra e mai rails, quindi cerca
eventualmente come leggere parametri dalla view dentro il controller)

unless params[:id].nil?
  id=params[:id]
 prodotto=Prodotto.get(id)
else
 prodotto = Prodotto.new
end

Paolo

2015-06-09 17:09 GMT+02:00 Xx Xx <darkslipknot@msn.com>:
> controller.
>
> Io vorrei passare l'id che si trova nel url, al method create in
> ElementiController
>
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml



--
$ cd /pub
$ more beer

I pirati della sicurezza applicativa: https://codiceinsicuro.it
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-11 15:28
Paolo P. wrote in post #1174821:
> No, prodotto non  dichiarata altrimenti il tuo codice funzionerebbe :-)
>
>>
>> --
>> Posted via http://www.ruby-forum.com/.
>> _______________________________________________
>> Ml mailing list
>> Ml@lists.ruby-it.org
>> http://lists.ruby-it.org/mailman/listinfo/ml
>
>
>
> --
> $ cd /pub
> $ more beer
>
> I pirati della sicurezza applicativa: https://codiceinsicuro.it

Prodotto e passato tramite il model con belongs_to :prodotto .
Infatti, li l'id non rimane vuoto.
Ma non mi serve nel model ma nel controller, l'id
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-11 17:15
Ora ho provato anche, scrivere il controllo dentro il mio model
Elemento, ma ho il problema contrario ora.

Riesco ad avere prodotto.id  ma non riesco ad accedere alla tabella
Elementi.

Quindi se nel controller Elementi non riesco a richiamare l'id presente
nel url ( my_app/prodotti/1 ) e nel model non riesco a richiamare la
colonna contenente gli id dei prodotti.

Come posso, verificare i miei elementi, in cerca del id prodotto, da
confrontare con l'id che mi viene passato dal url?
857c770ccb0a8e869994f663f09b22ec?d=identicon&s=25 Paolo P. (paolo_p)
on 2015-06-11 17:27
(Received via mailing list)
"Ma non mi serve nel model ma nel controller l'id"

Infatti... nel tuo controller devi accedere ai parametri della richiesta
HTTP.

In sinatra farei qualcosa del tipo
prodotto = Product.get(params[:product_id])

2015-06-11 15:28 GMT+02:00 Xx Xx <darkslipknot@msn.com>:
>>
> Ma non mi serve nel model ma nel controller l'id
>
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml



--
$ cd /pub
$ more beer

I pirati della sicurezza applicativa: https://codiceinsicuro.it
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2015-06-11 17:30
(Received via mailing list)
ciao Kira, se pubblichi il tuo progetto su github.com o, alla peggio,
zippi
tutta la cartella app/ della tua applicazione Rails e carichi lo zip su
uno
spazio di condivisione (come Dropbox), è meglio, così riusciamo subito a
capire qual'è il problema :-)

2015-06-11 17:15 GMT+02:00 Xx Xx <darkslipknot@msn.com>:
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-11 17:34
purtroppo in rails genera un errore " undefined method `get' " =_=

E da quello che leggo ( e studiato in rails ), il controller ( in teoria
) non ha accesso diretto al db, ma e il model che si incarica di
guardare dentro il db ( da quello che ho capito),
ma se ciò fosse vero, non potrei fare neanche collection =|
857c770ccb0a8e869994f663f09b22ec?d=identicon&s=25 Paolo P. (paolo_p)
on 2015-06-11 17:41
(Received via mailing list)
Apri un gist qui: https://gist.github.com/ cos siamo tutti pi
produttivi e possiamo ragionare codice alla mano...

2015-06-11 17:34 GMT+02:00 Xx Xx <darkslipknot@msn.com>:
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml



--
$ cd /pub
$ more beer

I pirati della sicurezza applicativa: https://codiceinsicuro.it
857c770ccb0a8e869994f663f09b22ec?d=identicon&s=25 Paolo P. (paolo_p)
on 2015-06-11 17:45
(Received via mailing list)
Apri un gist e metti il codice :-)

2015-06-11 17:40 GMT+02:00 Paolo Perego <thesp0nge@gmail.com>:
>>
> $ cd /pub
> $ more beer
>
> I pirati della sicurezza applicativa: https://codiceinsicuro.it



--
$ cd /pub
$ more beer

I pirati della sicurezza applicativa: https://codiceinsicuro.it
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-11 17:47
momento, momento, momento...

utilizzando request.path, ottengo product/:id , posso isolare :id?
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2015-06-11 17:57
(Received via mailing list)
@paolo: +1 per il gist
@Kira: metti il codice nel gist, che altrimenti è dura :-)
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-11 18:01
Maurizio De magnis wrote in post #1174945:
> @paolo: +1 per il gist
> @Kira: metti il codice nel gist, che altrimenti è dura :-)

si okey, ma forse ho risolto

utilizzando request.path, ottengo " product/:id " ,

ma vorrei isolare " :id " consigli?
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2015-06-11 18:07
(Received via mailing list)
Attachment: Help-Me-Help-You.jpg (10 KB)
Ci sono persone che ti stanno dedicando il loro tempo, aiutale ad
aiutarti
:-)

​

2015-06-11 18:01 GMT+02:00 Xx Xx <darkslipknot@msn.com>:
857c770ccb0a8e869994f663f09b22ec?d=identicon&s=25 Paolo P. (paolo_p)
on 2015-06-11 18:08
(Received via mailing list)
Allora, per splittare una stringa ruby ti da il metodo split:
request.path.split('/')[1].
Controlla prima che request.path abbia almeno un '/'.

Sappi che la soluzione che ti ho dato  talmente poco elegante che nel
momento stresso in cui premer invio ad una fatina cadranno le ali.

Vai col gist cos ti possiamo dare una mano e magari imparare una
soluzione elegante che potrai usare nuovamente in futuro ... :)

2015-06-11 18:01 GMT+02:00 Xx Xx <darkslipknot@msn.com>:
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml



--
$ cd /pub
$ more beer

I pirati della sicurezza applicativa: https://codiceinsicuro.it
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-11 18:10
Maurizio De magnis wrote in post #1174947:
> Ci sono persone che ti stanno dedicando il loro tempo, aiutale ad
> aiutarti
> :-)
> 2015-06-11 18:01 GMT+02:00 Xx Xx <darkslipknot@msn.com>:

Certo che si Maurizio ^_^ , mi sembrava una buona soluzione, purtroppo,

request.path_parameters[:id]

inserito dentro il Controller non da il risultato sperato.

-----------------------------------------------------------------------
Passando oltre, Maurizio, cosa vi serve?
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-11 18:12
Paolo P. wrote in post #1174948:
> Allora, per splittare una stringa ruby ti da il metodo split:
> request.path.split('/')[1].
> Controlla prima che request.path abbia almeno un '/'.
>
> Sappi che la soluzione che ti ho dato  talmente poco elegante che nel
> momento stresso in cui premer invio ad una fatina cadranno le ali.
>
> Vai col gist cos ti possiamo dare una mano e magari imparare una
> soluzione elegante che potrai usare nuovamente in futuro ... :)
>
> 2015-06-11 18:01 GMT+02:00 Xx Xx <darkslipknot@msn.com>:
>> --
>> Posted via http://www.ruby-forum.com/.
>> _______________________________________________
>> Ml mailing list
>> Ml@lists.ruby-it.org
>> http://lists.ruby-it.org/mailman/listinfo/ml
>
>
>
> --
> $ cd /pub
> $ more beer
>
> I pirati della sicurezza applicativa: https://codiceinsicuro.it

NOOOOOO povera fatina :(

ecco cosi ti sentirai meglio: request.path_parameters[:id] ^_^ (peccato
che ad ogni modo non funzioni :P)
Eda3d93f49a394d603bd5ecd7c821269?d=identicon&s=25 Andrea Pavoni (apeacox)
on 2015-06-11 18:18
(Received via mailing list)
usare lhelper `params[:id]` che  disponibile nei controllers di rails
non funziona?

ciao,
A.


>> Vai col gist cos ti possiamo dare una mano e magari imparare una
>>
> che ad ogni modo non funzioni :P)
>
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml

--
http://andreapavoni.com
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-12 09:58
Andrea Pavoni wrote in post #1174951:
> usare lhelper `params[:id]` che  disponibile nei controllers di rails
> non funziona?
>
> ciao,
> A.
>
>
>>> Vai col gist cos ti possiamo dare una mano e magari imparare una
>>>
>> che ad ogni modo non funzioni :P)
>>


?
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-12 10:00
Maurizio De magnis wrote in post #1174945:
> @paolo: +1 per il gist
> @Kira: metti il codice nel gist, che altrimenti è dura :-)

spero di inserire le parti giuste =|
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-12 10:19
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-06-12 10:28
(Received via mailing list)
Risulta non presente...

--

Maurizio De Santis

2015-06-12 10:19 GMT+02:00 Xx Xx <darkslipknot@msn.com>:
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-12 10:30
Anche ora?
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-06-12 10:30
(Received via mailing list)
No scusami, dall'email mi apre un altro indirizzo:
https://gist.github.com/anonymous/57a021627a4ee07a7ec8, dal forum mi
apre
quello giusto: https://gist.github.com/anonymous/6269bd3602c5abeceaa5

--

Maurizio De Santis

Il giorno 12 giugno 2015 10:27, Maurizio De Santis <
desantis.maurizio@gmail.com> ha scritto:
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-12 10:39
devo aggiungere altro?
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-06-12 10:59
(Received via mailing list)
Nella vista usi l'helper

    <%= f.hidden_field :prodotto_id, value: prodotto.id %>

Per cui per leggerlo dal controller dovresti usare

    elemento_params[:prodotto_id]

--

Maurizio De Santis

2015-06-12 10:39 GMT+02:00 Xx Xx <darkslipknot@msn.com>:
857c770ccb0a8e869994f663f09b22ec?d=identicon&s=25 Paolo P. (paolo_p)
on 2015-06-12 11:07
(Received via mailing list)
https://gist.github.com/thesp0nge/82a38aeb2db67fa74ffb

On 12 June 2015 at 10:39, Xx Xx <darkslipknot@msn.com> wrote:
> devo aggiungere altro?
>
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml



--
$ cd /pub
$ more beer

I pirati della sicurezza applicativa: https://codiceinsicuro.it
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-06-12 11:11
(Received via mailing list)
> prodotto_id = params["prodotto_id"]

Credo che se prodotto_id gli venga passato attraverso il form, e quindi
attraverso <%= f.hidden_field :prodotto_id >, debba usare
elemento_params[:prodotto_id]

--

Maurizio De Santis

2015-06-12 11:06 GMT+02:00 Paolo Perego <thesp0nge@gmail.com>:
857c770ccb0a8e869994f663f09b22ec?d=identicon&s=25 Paolo P. (paolo_p)
on 2015-06-12 11:19
(Received via mailing list)
Si si... io ho premesso che mastico pi Sinatra + Datamapper che Rails
+ ActiveRecord.
Al netto della sintassi, il concetto fondamentale  che il tuo dato tu
l'hai nella view ed hai bisogno di tirarlo dentro nel controller prima
di poterlo utilizzare.

HTH

2015-06-12 11:11 GMT+02:00 Maurizio De Santis
<desantis.maurizio@gmail.com>:
> 2015-06-12 11:06 GMT+02:00 Paolo Perego <thesp0nge@gmail.com>:
>> > Ml@lists.ruby-it.org
>> Ml mailing list
>> Ml@lists.ruby-it.org
>> http://lists.ruby-it.org/mailman/listinfo/ml
>>
> _______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml



--
$ cd /pub
$ more beer

I pirati della sicurezza applicativa: https://codiceinsicuro.it
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-12 11:27
:prodotto_id fa parte della tabella Elementi, ma ho bisogno del
prodotto.id per il confronto ( il numero che viene visualizzato nel url
).

Altrimenti, il confronto mi darebbe sempre " true "

Quindi, il mio obbiettivo e ottenere l'id corrente da confrontare con
gli id presenti nel db (in caso il db non ha id, deve creare un nuovo "
elemento.new " )

----------------------------------------------------------------

Rettifico, ora ricevo l'id. Grazie mille ragazzi, siete fantastici come
sempre ^_^

Ora devo solo trovare un modo, per riuscire ad associare il risultato
con l'id del Elemento che devo modificare. Vi tengo aggiornati.

Grazie ancora, a presto
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-06-12 11:40
(Received via mailing list)
> ho bisogno del
prodotto.id per il confronto ( il numero che viene visualizzato nel url
)

In quale url, nell'url della pagina che invia il form? Se intendi
questo,
allora glielo devi passare dal form aggiungendo un altro hidden_field.
Per
esempio:

Nel form:

    <%= form_for elemento, remote: true do |f| %>
      <%= hidden_field_tag
:chiave_per_mezzo_della_quale_acceder_al_valore_dal_controller, value:
valore_che_voglio_passare_al_controller %>

Nel controller:

def create
    prodotto_id =
params[:chiave_per_mezzo_della_quale_acceder_al_valore_dal_controller]
    ...


--

Maurizio De Santis

Il giorno 12 giugno 2015 11:27, Xx Xx <darkslipknot@msn.com> ha scritto:
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-12 11:49
Maurizio De Santis wrote in post #1174995:
>> ho bisogno del
> prodotto.id per il confronto ( il numero che viene visualizzato nel url
> )
>
> In quale url, nell'url della pagina che invia il form? Se intendi
> questo,
> allora glielo devi passare dal form aggiungendo un altro hidden_field.
> Per
> esempio:
>
> Nel form:
>
>     <%= form_for elemento, remote: true do |f| %>
>       <%= hidden_field_tag
> :chiave_per_mezzo_della_quale_acceder_al_valore_dal_controller, value:
> valore_che_voglio_passare_al_controller %>
>
> Nel controller:
>
> def create
>     prodotto_id =
> params[:chiave_per_mezzo_della_quale_acceder_al_valore_dal_controller]
>     ...
>
>
> --
>
> Maurizio De Santis
>
> Il giorno 12 giugno 2015 11:27, Xx Xx <darkslipknot@msn.com> ha scritto:

!_! Grazie Maurizio, il tuo consiglio " @prodotto =
elemento_params[:prodotto_id] " e stato risulutivo.

Adesso purtroppo sono nella posizione di far passare l'id del "
elemento.id " da " update ".

Attualmente l'id viene passato manualmente (e non va bene), devo
associarlo al confronto di prima ( per chiarirci, sto parlando della
porzione di codice dopo l'if ).

Ad ogni modo ora provo a cercare una soluzione.

Vi ringrazio ancora una volta ^_^
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-15 16:08
def create
    @ordine = current_ordine
    @prodotto = elemento_params[:prodotto_id]
    if ( current_ordine.elementi.collect { |x| x.prodotto_id ==
@prodotto }.include?(true) ) == true

      @update = current_ordine.elementi.collect { |x| x.prodotto_id ==
@prodotto  and x.id }

      @elemento = @ordine.elementi.find(params[@update])
      @elemento.update_attributes(elemento_params)
      @elementi = @ordine.elementi

    else
      @ordine = current_ordine
      @elemento = @ordine.elementi.new(elemento_params)
      @ordine.save
      session[:ordine_id] = @ordine.id
    end
  end

ho cercato e riprovato, ma l'unica cosa che sono riuscito a ottenere e
questo:

" current_ordine.elementi.collect { |x| x.prodotto_id == @prodotto  and
x.id } "

In questo modo, riesco a far visualizzare il numero del id, quando e
true, mentre quando e false, mostra false.

Ma non riesco a isolare l'id e passarlo alla riga successiva

Ho tentato anche con:

current_ordine.elementi.collect { |x| ( x.prodotto_id == prodotto.id
and x.id ).last }.extract_options!(:id)

ma niente mi da un errore di wrong number

consigli?
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-16 11:30
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????
Eda3d93f49a394d603bd5ecd7c821269?d=identicon&s=25 Andrea Pavoni (apeacox)
on 2015-06-16 11:57
(Received via mailing list)
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
>
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml

--
http://andreapavoni.com
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-06-16 14:46
(Received via mailing list)
> 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 Pavoni <apeacox@gmail.com> ha
scritto:
Eda3d93f49a394d603bd5ecd7c821269?d=identicon&s=25 Andrea Pavoni (apeacox)
on 2015-06-16 15:00
(Received via mailing list)
esatto, scrivendo di corsa ci sono scappati un paio di typos. comunque
spero di aver reso lidea :-)

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
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml

--
http://andreapavoni.com
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-16 16:12
Andrea Pavoni 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
>>
>> Ml@lists.ruby-it.org
>> 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'
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-06-16 16:26
(Received via mailing list)
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 <darkslipknot@msn.com> ha scritto:
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-16 16:35
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 <darkslipknot@msn.com> ha scritto:

scusa l'ignoranza, potresti spiegarti meglio?
In che senso dovrei definirla?
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-06-16 16:40
(Received via mailing list)
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 <darkslipknot@msn.com> ha scritto:
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-16 17:04
Quindi, richiamando elementi.any? ottengo true che e un valore nil,
giusto?

Quindi dovrei definire quel nil?
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-06-16 17:11
(Received via mailing list)
> 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
:)

--

Maurizio De Santis

2015-06-16 17:04 GMT+02:00 Xx Xx <darkslipknot@msn.com>:
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-16 17:15
> @elemento.errors , essendo @elemento nil. Mi sa che stai facendo
> confusione
> :)

Eh, si. Il tunnel e ancora buio :(
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-16 17:18
Xx Xx wrote in post #1175147:
>> @elemento.errors , essendo @elemento nil. Mi sa che stai facendo
>> confusione
>> :)
>
> Eh, si. Il tunnel e ancora buio :(

Questo significa, che non sa quale elemento aggiornare?!

Dato che non gli viene passato un id, di un elemento, giusto?
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-06-16 18:26
(Received via mailing list)
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 <darkslipknot@msn.com>:
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2015-06-16 23:40
(Received via mailing list)
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 :-)

2015-06-16 18:26 GMT+02:00 Maurizio De Santis
<desantis.maurizio@gmail.com>:
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-06-16 23:42
(Received via mailing list)
Concordo col mio omonimo, altrimenti qua non ne usciamo più :D

Il giorno mar 16 giu 2015 23:40 maurizio de magnis <
maurizio.demagnis@gmail.com> ha scritto:
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2015-06-16 23:44
(Received via mailing list)
Attachment: wolverine-spiderman_fist_bump.jpg (60 KB)
​

2015-06-16 23:41 GMT+02:00 Maurizio De Santis
<desantis.maurizio@gmail.com>:
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-18 16:44
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?
Eff93e9bbe063b7136c9b6f218071a09?d=identicon&s=25 Marco Mastrodonato (marcomd)
on 2015-06-19 14:44
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.
6067112d95bbe5bb037350ec7ba3826e?d=identicon&s=25 Xx Xx (k1ra)
on 2015-06-19 15:28
Marco Mastrodonato 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 ^^

https://github.com/k1ra/cart

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

https://github.com/RichIsOnRails/ShoppingCartExamp...

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à ^^
This topic is locked and can not be replied to.