Ouverture de session

Commentaires récents

Syndication
Flux XML

ou mettre mon code???

ou mettre mon code???
Posté par mazraelle le Mercredi, 14 Mai, 2008 - 12:25pm. Débuter avec Rails

bonjour,
J'ai 3 fichiers:
-Notedefraisreel_Controller.rb
-Fraisreel.rb
- _from.rhtml

Je desire faire une liste deroulante qui va chercher ces informations dans differentes tables de ma base de données.
Voici la requete qui renvoit les code projet. Dans quele fichiers doit etre mis cette requete?


@requete = Fraisreel.find_by_sql("SELECT code_projet, id, pd.projet_departement_id"+
" FROM PROJETS p ,PROJETS_DEPARTEMENTS pd, PROJETS_DEPARTEMENTS_SALARIES pds"+
" WHERE p.id = pd.projet_id"+
" AND pd.projet_departement_id = pds.projet_departement_id"+
" AND pds.salarie_id='JFLOR'"+
" AND projet_clos = 0"+
" AND droit_pointer = 1"+
" ORDER BY p.id")

@requete = @requete.map{|u| [u.code_projet, u.id]}

Dans le _form.rhtml
j'ai entre 2 balises td
select("Post",:code_projet, @requete)
premiere question a quoi sert le post et que doit on mettre en premier parametre

Si je mets l'ensemble du code dans _form.rhtml, ma liste deroulante s'affiche bien mais rien n'est enregistré dans la base a la soumission du formulaire

Pouvez vous m'aider??



[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | sujet précédent | sujet suivant | envoyer par email ]

Options d'affichage des commentaires
Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder" pour activer vos changements.

Sujet: 
MVC
Auteur: 
jasperiel
Date: 
Mer, 14/05/2008 - 13:52

Le contrôleur prépare les données à afficher dans la vue.
Le code serait donc à mettre dans le "_controller.rb".

Pour le select, le mieux serait de lire la documentation (api.rubyonrails.org, recherche "select (").

Pour l'enregistrement en base, je te conseille de faire dans ta vue "params.inspect" et de comparer le format que tu obtiens au format que tu as quand tu fais des forms générés par Rails.

Enfin, ta requête est horrible. C'est vraiment par souci de performance (early optimization is the root of all evil -- Knuth) ou parce que tu aimes le SQL ? Dans ce cas, lis la doc de ActiveRecord::Base pour apprendre à utiliser les finders et les conditions.


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
merci bcp pour tes
Auteur: 
mazraelle
Date: 
Mer, 14/05/2008 - 14:43

merci bcp pour tes reponses.
je dois reecrire un bout de code qui est au depart en php en ruby . ce code est toujours pour ma liste deroulante Bonjour,
ce code sera place dans le controlleur.

code php
$requete = "SELECT code_projet, p.projet_id, pd.projet_departement_id
FROM ".NT_PROJETS." p ,".NT_PROJETS_DEPARTEMENTS." pd, ".NT_PROJETS_DEPARTEMENTS_SALARIES." pds
WHERE p.projet_id = pd.projet_id
AND pd.projet_departement_id = pds.projet_departement_id
AND pds.salarie_id='".$salarie_id_ndf."'
AND projet_clos = 0
AND droit_pointer = 1
ORDER BY p.projet_id";
$nb_lots = 0;
$resultat = exeRequete($requete);
while ($ligne = mysql_fetch_array($resultat))
{
$requete = "SELECT code_lot, lot_id FROM ".NT_LOTS."
WHERE projet_departement_id = ".$ligne["projet_departement_id"]."
ORDER BY num_ordre";
$resultat2 = exeRequete($requete);
while ($lot = mysql_fetch_array($resultat2))
{
$tab_of[$nb_lots]["lot_id"] = $lot["lot_id"];
$tab_of[$nb_lots]["code_lot"] = $lot["code_lot"];
$tab_of[$nb_lots]["projet_id"] = $ligne["projet_id"];
$tab_of[$nb_lots]["code_projet"] = $ligne["code_projet"];
$nb_lots++;
}
}

voila ce que j'ai tenté decrire en ruby. Je crois que je vais dans le mur!!!

def liste_of
#//Récupération des porjets et des lots ou la personne à le droit de pointer et donc de mettre des NdF
$requete = Fraisreel.find(:all,
:conditions => ["projet_id = ? AND projet_departement_id = ? AND salarie_id = ? AND projet_clos = 0 AND droit_pointer = 1", projet_id, projet_department_id, salarie_id_ndf],
:order => "projet_id")

nb_lots =0
@requete.projet_departement_id.each do |projet_departement_id|
@requete = Fraisreel.find(:all,
:conditions => ["project_department_id = ?", project_department_id],
:order => "num_ordre")

@requete.id.each do |lotid|
tab_of[nb_lots]["id"]=lotid[id]
tab_of[nb_lots]["code_lot"]=lotid[code_lot]
tab_of[nb_lots]["projet_id"]=lotid[projet_id]
tab_of[nb_lots]["code_projet"]=lotid[code_projet]
nb_lots =nb_lots+1
end
end

end

Verdict???(honte a moi pour ce code??? =>OUI)


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
Salut,
Auteur: 
Kobra
Date: 
Mer, 14/05/2008 - 17:22

Salut,

As-tu regardé pour utiliser has_and_belongs_to_many dans tes models. Je pense que ça t'offrirait quelques fonctions succeptible d'alleger grandement ton code. Dans l'hypothèse (idéale mais pas forcément réalisable) où tu peux modifier ta base de données, si tu as une table users, et une table projects, avec comme table intermédiaire projects_users, tu pourrais faire un truc comme :


user = User.find_by_name('Toto')
@projects = user.projects.find(:all)

Quitte à rajouter quelques conditions dans ton find. L'affichage d'une liste déroulante n'est par la suite pas très compliquée à gérer...

<% form_for :note, :url => {:action => :add_note} do |form| %>
<p>
<%= form.select(:project_id, @projects) %>
<%= form.text_field :value %>
<%= submit_tag "Add !", :class => "submit" %>
</p>
<% end %>

Voilà, je ne sais pas vraiment si ça peut t'aider, mais au cas où... :)

Bon courage


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
Pas forcément
Auteur: 
jasperiel
Date: 
Jeu, 15/05/2008 - 00:25

Hop, je précise simplement que tu n'es même pas obligé de changer la BDD. Convention Over Configuration sait AUSSI se ocnfigurer, et ActiveRecord propose la méthode de classe "table_name" (lire la doc) pour ça.

Quant au commentaire de code, désolé mais il donne absolument pas envie de rentrer dedans ^^;

Sinon, tu as des fous qui se sont amusés à faire un émulateur PHP en Ruby, je crois (bref, à pourrir le namespace global en aliasant/recodant un max de trucs PHP pour pouvoir l'interpréter avec l'interpréteur Ruby). C'est immonde mais ça peut t'aider un petit moment pour pouvoir tester direct en conditions réelles.

Astuce : à chaque fois que j'ai rendu mon code plus puissant et flexible, je diminuais drastiquement le nombre de lignes et ça convergeait vers la solution la plus élégante. Parfois, faut pas hésiter à faire le porc For The Greater Good. Même si en l'occurence je pense que tu peux faire mieux que l'appli PHP d'origine, en moins de temps et moins de ligne, en la refaisant from scratch, si tu arrives à sortir une jolie architecture.

Mais renseigne toi quand même sur la philosophie Rails (doc ActiveRecord::Base, ActionController::Base et ActionView::Base) avant, ça aide vraiment :)


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Nouveaux liens

Sondage
Lorsque je développe avec Ruby on Rails c'est principalement sous:
Linux
37%
Mac OS X
29%
Windows
32%
(Free|Open|Net) BSD
1%
Autre...
1%
Nombre de votes: 356

Qui est en ligne
Il y a actuellement 1 utilisateur et 42 invités en ligne.

railsfrance.org - communauté francophone des utilisateurs de Ruby on Rails
[ Hébergement et ressources techniques gracieusement fournis par la SSLL Nuxos Group ]