mais je ne sais pas trop ou la mettre, item_helper je suppose?
Dans ton modèle, app/models/item.rb
ok merci
aussi est-ce qu’il n’y aurait pas mieux genre les
fonctions self?
“Les fonctions self”, c’est-à-dire ?
ou un truc comme ça.
J’ai rien dit
au fait tu sais comment on fait pour insérer des valeurs à partir de
migration?
J’éssayer ça mais c’est pas bon:
class CreateItems < ActiveRecord::Migration
def self.up
create_table :items do |t|
t.column ‘price’, :string, :limit => 30
t.column ‘description’, :text
t.column ‘quantity’, :int
t.column ‘invoice_id’, :int
end
end
Item.create(:price=>‘123’,:description=>‘nice
item’,:quantity=>‘3’,:invoice_id=>1)
Item.create(:price=>‘54’,:description=>‘bad
item’,:quantity=>‘2’,:invoice_id=>1)
Item.create(:price=>‘15’,:description=>‘cool
item’,:quantity=>‘4’,:invoice_id=>2)
def self.down
drop_table :items
end
end
voilà l’erreur:
Mysql::Error: #42S02Table ‘invoiceapp_development.items’ doesn’t
exist: SHOW FIELDS FROM items
j’éssais de faire la même chose avec les invoices, pour chaque invoice
je veux calculer la somme de chacune des sommes de chaque items.
donc dans mon model/invoice.rb j’ai mis:
def sum
items.inject {|a,b| a.sum + b.sum}
end
dans mon list.rhtml je fais
<% for inv in @invoices %>
<%= inv.sum %>
<% end %>
ça marche quand un invoice a deux items ou plus mais quand un invoice
a un seul item ça me revoie le item donc # sur le list.rhtml. Est-ce
qu’il y a un moyen de faire marcher inject quand un invoice a qu’un
seul item?
Non, ça marchera pas comme ça, le premier paramètre
de ton block doit être l’accumulateur, ici la somme partielle.
Et tu pars de 0 :
items.inject(0) { |acc,e| acc + e.sum }
dans mon list.rhtml je fais
<% for inv in @invoices %>
<%= inv.sum %>
<% end %>
ça marche quand un invoice a deux items ou plus
T’es sûr que ça marche avec 3 items ? Moi pas.
mais quand un invoice a un seul item ça me revoie le item
donc # sur le list.rhtml. Est-ce qu’il y a un moyen de faire
marcher inject quand un invoice a qu’un seul item?