# Primi passi con rails

**URL:** <https://www.ruby-forum.com/t/primi-passi-con-rails/117540>\
**Category:** IT\
**Created:** [October 17, 2007, 9:54pm UTC](https://www.ruby-forum.com/t/primi-passi-con-rails/117540 "2007-10-17T21:54:10Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [October 17, 2007, 9:54pm UTC](https://www.ruby-forum.com/t/primi-passi-con-rails/117540/1 "2007-10-17T21:54:10Z")

</div>

Ciao a tutti,

Mi presento, sono un nuovo iscritto a questa mailing list, la mia  
giornata lavorativa consiste nell’usare il linguaggio java per lo  
sviluppo di gestionali.

Recentemente ho seguito qualche presentazione di Rails e mi è venuta  
voglia di provarlo, anche se purtroppo non ho nessun progetto in  
cantiere con questo framework.

Sto leggendo “Agile Web D. with Rails” e ho iniziato a leggerlo  
senza avere la minima conoscenza di ruby, però il libro sembra fatto  
abbastanza bene e per ora (pag 82) non ho avuto alcun problema.

Però ho qualche problema con Rails.

Sto facendo l’esempio del Books Online Store e non riesco a visualizzare  
lo unit\_price. Mi spiego meglio ho questa schermata qua:

```
    <h1>Display Cart</h1>
    <table>
    <%
    for item in @items
      product = item.product
    -%>
      <tr>
        <td><%= item.quantity %></td>
        <td><%= h(product.title) %></td>
        <td><%= item.unit_price %></td>
      </tr>
    <% end -%>
    </table>

```

Però la terza riga causa un errore che porta webrick a mostrarmi una pagina  
di errore con scritto “We’re sorry, but something went wrong.”, che per  
un programmatore è assolutamente inutile, si può far visualizzare lo  
stacktrace ?  
Comunque togliendo la riga dello item.unit\_price tutto funziona  
correttamente.

Questo è lo store\_controller:  
class StoreController \< ApplicationController

def index  
@products = Product.salable\_items  
end

def add\_to\_cart  
render :action =\> ‘ciao’  
end

def add\_to\_cart  
product = Product.find(params[:id])  
@cart = find\_cart  
@cart.add\_product(product)  
redirect\_to(:action =\> ‘display\_cart’)  
end

def display\_cart  
@cart = find\_cart  
@items = @cart.items  
end

private  
def find\_cart  
session[:cart] ||= Cart.new  
end

end

Questa è la classe LineItem:

class LineItem \< ActiveRecord::Base

belongs\_to :product

def self.for\_product(product)  
item = self.new  
item.quantity = 1  
item.product = product  
item.unit\_price = product.price  
item  
end  
end

Qeusta invece è la classe Cart:

class Cart

attr\_reader :items  
attr\_reader :total\_price

def initialize  
@items = []  
@total\_price = 0.0  
end

def add\_product(product)  
@items \<\< LineItem.for\_product(product)  
@total\_price += product.price  
end  
end

Il nome della colonna è uguale a quella su db (mysql 5) e sono entrambe  
dello stesso tipo DECIMAL(10, 2). Sono su Ubuntu 7.04 e sto usando JRuby  
1.0.1 presente su Netbeans 6 beta.  
Quando provo a far partire in debug l’applicazione, Netbeans mi dice che  
JRuby non supporta il debug, è normale ? Mi pare strano …

Un’altra cosa strana è che non riesco a cancellare elementi, l’action  
destroy, generata automaticamente non esegue la cancellazione ma non  
causa nessun errore, semplicemente non succede nulla.  
Questa è l’action “incriminata”:  
def destroy  
Product.find(params[:id]).destroy  
redirect\_to :action =\> ‘list’  
end

e questo il link all’action della pagina rhtml:  
\<%= link\_to ‘Destroy’, { :action =\> ‘destroy’, :id =\> product },  
:confirm =\> “Are you sure?” %\>

Son certo di essere stato prolisso, scusatemi ma avevo molti dubbi,  
grazie a tutti in anticipo,  
–gm

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [October 18, 2007, 9:33am UTC](https://www.ruby-forum.com/t/primi-passi-con-rails/117540/2 "2007-10-18T09:33:21Z")

</div>

> Sto facendo l’esempio del Books Online Store e non riesco a  
> visualizzare lo unit\_price. Mi spiego meglio ho questa schermata qua:
> 
> ```
> <h1>Display Cart</h1>
> <table>
> <%
> for item in @items
> product = item.product
> -%>
> 
> ```

Questa riga mi pare un po’ strana…  
Prova a sostituire con:  
\<% for item in @items %\>

> ```
> <tr>
> <td><%= item.quantity %></td>
> <td><%= h(product.title) %></td>
> 
> ```

…e questa sopra con:

\<%=h item.product.title %\>

> ```
> <td><%= item.unit_price %></td>
> 
> ```

Questa ti dà errore?  
Verifica nella console:  
script/console  
i = LineItem.find :first  
i.unit\_price

Ah, aspetta… ho letto meglio sotto. Mi sa che il tuo model non funzia.

- il Cart ha un getter (un attr\_reader in Ruby) ma non è legato al DB  
=\> togli attr\_reader :items  
=\> Cart has\_many :line\_items  
=\> LineItem belongs\_to Cart  
=\> aggiungi migrations per rispecchiare quanto sopra  
(In questo modo la tabella line\_items funziona come un join table  
‘ricco’ per la relazione n:m tra Cart e Product e potrai fare  
Cart has\_many :products, :through =\> line\_items cosicché potrai fare cose  
come:  
prezzi = Cart.find(:first).products.map(&:price) # Array dei prezzi di  
tutti prodotti del primo Cart nel db  
)

- usi “items”, ma in realtà vuoi accedere ad un collection di istanze di  
LineItem; rails ti vuole molto più meglio se chiami le robe con il loro  
nome… 😉

- destroy vorrà essere chiamato con un HTTP DELETE e non un GET come fai  
tu qua sotto; aggiungi un :method =\> :delete e vedrai che va meglio

- destroy ritorna l’oggetto cancellato o nil (==false in Ruby), quindi  
metti lo in una condizionale:  
def destroy  
if Product.find(params[:id]).destroy

- infine qualche consiglio:

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [October 18, 2007, 10:00am UTC](https://www.ruby-forum.com/t/primi-passi-con-rails/117540/3 "2007-10-18T10:00:14Z")

</div>

removed\_email\_address@domain.invalid ha scritto:

> Però la terza riga causa un errore che porta webrick a mostrarmi una pagina di errore con scritto “We’re sorry, but something went wrong.”, che per un programmatore è assolutamente inutile, si può far visualizzare lo stacktrace ?

Prova a dare un’occhiata in log/development.log 😉

–  
blog: [www.lucaguidi.com](http://www.lucaguidi.com)

Speaker at:  
Rails To Italy '07 Conference  
Oct, 26-27 2007 - Pisa  
[www.railstoitaly.org](http://www.railstoitaly.org)
