Bonjour,
le titre n'est pas trop explicite, mais j'ai pas trouvé mieux
Je suis novice en Rails et j'essaie d'afficher un champs qui se trouve
dans une relation.
Schema de la DB
ActiveRecord::Schema.define(:version => 20100130221503) do
create_table "accounts", :force => true do |t|
t.text "account_number"
t.text "bank"
t.text "owner"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "depenses", :force => true do |t|
t.date "datedepense"
t.decimal "credit"
t.decimal "debit"
t.integer "account_id"
t.integer "type_id"
t.datetime "created_at"
t.datetime "updated_at"
t.string "description"
t.string "code"
end
create_table "types", :force => true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
end
Model depense
class Depense < ActiveRecord::Base
belongs_to :account
validates_presence_of :account
belongs_to :type
end
Model type
class Type < ActiveRecord::Base
has_many :depense
end
views index.html.erb
<h1>Listing depenses</h1>
<table>
<tr>
<th>Datedepense</th>
<th>Credit</th>
<th>Debit</th>
<th>Id account</th>
<th>Id type</th>
<th>description</th>
<th>code</th>
</tr>
<% @depenses.each do |depense| %>
<tr>
<td><%=h depense.datedepense %></td>
<td><%=h depense.credit %></td>
<td><%=h depense.debit %></td>
<td><%=h depense.account_id %></td>
<td><%=h depense.type_id %></td>
<td><%=h depense.description %></td>
<td><%=h depense.code %></td>
<td><%= link_to 'Show', depense %></td>
<td><%= link_to 'Edit', edit_depense_path(depense) %></td>
<td><%= link_to 'Destroy', depense, :confirm => 'Are you sure?',
:method => :delete %></td>
</tr>
<% end %>
</table>
<br />
<%= link_to 'New depense', new_depense_path %>
dans la vue a la place de depense.type_id, j'aimerais
depense.types.name. ca ne marche pas et après plusieurs essaie de
définition de variable dans le controlleur, je sèche
on 2010-03-15 16:21
on 2010-03-15 16:27
> ca ne marche pas et après plusieurs essaie de > définition de variable dans le controlleur, je sèche > as-tu essayé avec autre chose que le mot 'type' ? je me demande si ce n'est pas un mot réservé... gUI
on 2010-03-15 17:44
>> as-tu essayé avec autre chose que le mot 'type' ? je me demande si ce n'est pas un mot réservé... Je confirme, j'ai déjà eu des ennuis en utilisant "type". C'est en effêt une méthode d'Object, même si son usage est "deprecated" irb(main):002:0> 'toto'.type (irb):2: warning: Object#type is deprecated; use Object#class => String -- IciMarché fédère l'e-commerce de proximité http://icimarche.fr
on 2010-03-15 17:57
2010/3/15 philippe lachaise <philippe.lachaise@gmail.com>: > C'est un mot clé réservé et utilisé par ActiveRecord pour gérer la STI. -- http://fabien.jakimowicz.com
on 2010-03-15 19:14
Le 15 mars 2010 11:55, Fabien Jakimowicz <fabien@jakimowicz.com> a écrit : > > => String > > > > C'est un mot clé réservé et utilisé par ActiveRecord pour gérer la STI. pour info, la liste complète des mots clés réservés : http://wiki.rubyonrails.org/rails/pages/reservedwords
on 2010-03-15 21:21
Bon le problème ne venait pas que j'avais choisi un nom proche d'un mot
réservé.
La variable @depenses n'a plus accès à la table Type
J'ai résolu le problème ne fessant un Hash de ma table Type
......
def index
@depenses = Depense.all
@types = Hash.new
@types = Hash[*Type.all.map { |u| [u.id, u.name] }.flatten]
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @depenses }
end
end
.....
et dans ma vue
.....
<td><% if depense.type_id != nil %>
<%=h @types[depense.type_id] %>
<%end %>
</td>
......
on 2010-03-15 23:11
Bonsoir. Je suis vraiment perplexe là... Tout le monde te dit de renommer cette variable autrement que Type. Et c'est exactement cela le problème. Tout ton code de contrôleur avec l'initialisation de la variable @types ainsi que ton code de vue ne sert a rien. Ne tente pas de réinventer la roue, si quelque chose ne fonctionne pas simplement c'est que sûrement tu t'y prends mal. Si t'as un objet Bar qui a un attribut name, et un objet Foo qui a belongs_to :bar, tu dois pouvoir écrire directement dans ta vue @foo.bar.name et c'est tout. Et enfin si ton objet Depense est rattaché à plusieurs types de dépense, c'est pas du belongs_to mais sûrement du has_and_belongs_to_many et dans ce cas : RTFM sur http://api.rubyonrails.org @+. Nicolas. 2010/3/15 Denis Helix <list-incoming@andreas-s.net>:
on 2010-03-16 10:41
Nicolas Blanco wrote: > Bonsoir. > > Je suis vraiment perplexe l�... Tout le monde te dit de renommer cette > variable autrement que Type. Et c'est exactement cela le probl�me. > Tout ton code de contr�leur avec l'initialisation de la variable > @types ainsi que ton code de vue ne sert a rien. > Ne tente pas de r�inventer la roue, si quelque chose ne fonctionne pas > simplement c'est que s�rement tu t'y prends mal. > Si t'as un objet Bar qui a un attribut name, et un objet Foo qui a > belongs_to :bar, tu dois pouvoir �crire directement dans ta vue > @foo.bar.name et c'est tout. > Et enfin si ton objet Depense est rattach� � plusieurs types de > d�pense, c'est pas du belongs_to mais s�rement du > has_and_belongs_to_many et dans ce cas : RTFM sur > http://api.rubyonrails.org > > @+. Nicolas. > > > 2010/3/15 Denis Helix <list-incoming@andreas-s.net>: Bonjour, J'ai fait le test avec la table account, et j'ai eu le même problème quand je défini @depenses = Depense.all (testé dans la console avec la table accounts) @depenses ne permet pas d'avoir access à types. Bon c'est sûr types pour la DB n'était pas un bon choix
on 2010-03-16 11:23
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html;charset=UTF-8" http-equiv="Content-Type"> </head> <body bgcolor="#ffffff" text="#000000"> <br> <blockquote type="cite">J'ai fait le test avec la table account, et j'ai eu le même problème quand je défini @depenses = Depense.all (testé dans la console avec la table accounts) <br> @depenses ne permet pas d'avoir access à types. <br> </blockquote> je pense que je (on) avais mal compris ton besoin. c'est de choper l'ensemble des types des dépenses ? <br> <br> dans ce cas je ferais qqchose comme (là je parle sous le controle de la liste j'ai pas de Ruby sous la main, j'ai assez de pb psychomoteurs avec les différents types énumérés): <br> <br> Depenses.all.each do <code class="moz-txt-verticalline"><span class="moz-txt-tag">|</span>dep<span class="moz-txt-tag">|</span></code> <br> @liste_types << dep.type <br> end <br> <br> mais en effet, Active Record ne possède pas de raccourcis pour à partir d'un énuméré te donner un autre énuméré 'fils' ou (père ou frère ou soeur oh oh ce serait le bonheur). <br> <br> gUI <br> </body> </html> <p></p> -- <br /> Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google Groups.<br /> Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse railsfrance@googlegroups.com<br /> Pour résilier votre abonnement envoyez un e-mail à l'adresse railsfrance-unsubscribe@googlegroups.com
on 2010-03-16 22:05
Bonsoir, ce que je cherche, ce n'est pas de reprendre tout les objets types, mais d'afficher dans ma vue de toutes mes depenses avec types.name et lieu de depenses.type_id.
on 2010-03-16 23:02
Bon en faite @depenses = Depense.all @depense.type.name Ca marche quand il y un un type associé aux depense, sinon @depense.type = nil et @depense.type.name renvoie une erreur
on 2010-03-16 23:38
Bon en faite > @depenses = Depense.all > @depense.type.name > > j'avoue etre un peu perdu dans tes singuliers et tes pluriels. tu as ecris plusieurs fois que tu cherchais à faire @depenses.types par exemple, ça n'a rien à voir avec @depense.type ! gUI -- Pour la santé de votre ordinateur, préférez les logiciels libres. Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/ Browser le web : http://www.mozilla-europe.org/fr/products/firefox/ Suite bureautique : http://fr.openoffice.org/
on 2010-03-16 23:50
Yo. Tu as une relation belongs_to :type dans ton objet dépense, cela veut dire que la relation est sur depense.type et non pas depense.types. Si une dépense a un seul type, c'est du belongs_to et la relation est au singulier, sinon c'est du has_many ou has_and_belongs_to_many avec une table de relation intermédiaire, et là effectivement le nom de la relation est au pluriel ! Si dans ta vue tu veux afficher le nom du type de ta dépense et tu n'es pas sur que celui ci est défini a chaque fois (il est peut être nil sur certains enregistrements), tu peux t'amuser à tester que depense à un type avec un bloc if ou encore faire des choses plus rapides du style : <%= depense.type.try(:name) || "N.C." %> (qui affichera N.C. si depense n'a pas de type) ou encore mieux utiliser la méthode delegate dans ton modèle (regarde la doc de Rails) et dans ce cas écrire dans ta vue <%= depense.type_name || "N.C." %>. De plus, écoute nous et renomme rapidement ta relation/modèle en autre chose que Type/type ! Tout le monde te dit que type est un mot clé réservé dans Rails, donc si t'as pas de problème maintenant t'en auras forcément plus tard et tu risques de te mordre les doigts après des heures à rechercher pourquoi. Nicolas. 2010/3/16 Denis Helix <list-incoming@andreas-s.net>:
on 2010-03-17 06:21
Guillaume Betous wrote: > Bon en faite > >> @depenses = Depense.all >> @depense.type.name >> >> > j'avoue etre un peu perdu dans tes singuliers et tes pluriels. tu as > ecris > plusieurs fois que tu cherchais à faire @depenses.types par exemple, ça > n'a > rien à voir avec @depense.type ! > > gUI > > -- > Pour la santé de votre ordinateur, préférez les logiciels libres. > Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/ > Browser le web : http://www.mozilla-europe.org/fr/products/firefox/ > Suite bureautique : http://fr.openoffice.org/ Désole, @depenses.types n'existe pas, seul @depense.type donne quelques chose, à ne pas confondre avec la class Type qui est définie dans le module pour la gestion de la table types
on 2010-03-17 06:34
Nicolas Blanco wrote: > Yo. > > Tu as une relation belongs_to :type dans ton objet d�pense, cela veut > dire que la relation est sur depense.type et non pas depense.types. Si > une d�pense a un seul type, c'est du belongs_to et la relation est au > singulier, sinon c'est du has_many ou has_and_belongs_to_many avec une > table de relation interm�diaire, et l� effectivement le nom de la > relation est au pluriel ! > > Si dans ta vue tu veux afficher le nom du type de ta d�pense et tu > n'es pas sur que celui ci est d�fini a chaque fois (il est peut �tre > nil sur certains enregistrements), tu peux t'amuser � tester que > depense � un type avec un bloc if ou encore faire des choses plus > rapides du style : > <%= depense.type.try(:name) || "N.C." %> (qui affichera N.C. si > depense n'a pas de type) ou encore mieux utiliser la m�thode delegate > dans ton mod�le (regarde la doc de Rails) et dans ce cas �crire dans > ta vue <%= depense.type_name || "N.C." %>. > > De plus, �coute nous et renomme rapidement ta relation/mod�le en autre > chose que Type/type ! Tout le monde te dit que type est un mot cl� r�serv� dans Rails, donc si t'as pas de probl�me maintenant t'en auras > forc�ment plus tard et tu risques de te mordre les doigts apr�s des > heures � rechercher pourquoi. > > Nicolas. > > 2010/3/16 Denis Helix <list-incoming@andreas-s.net>: la relation est bien delongs_to, une depense à 0 ou 1 type associé j'avais résolu le problème du nil en testant dans le controleur la valeur if @depense.type == nil @type_render = " " else @type_render = @depense.type.name end <%= depense.type.try(:name) || "N.C." %> marche nickel, c'est plus propre que de définir une variable. Je vais regarder aussi la la methode delegate Entre temps j'ai recreé la table types => genders et en même temps le champs name en designation, parce que name pausse aussi des problèmes. Merci de vos réponses.
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.