Bonjour
j’ai un problème avec un un message d’erreur, qui s’affiche lorsque je
crée un nouvele enregistrement, mais lorsque je l’édite et que je fait
un update rien ne s’affiche, et la valeur n’est pas modifiée.
Merci d’avance pour votre aide
ma vue d’ajout est la suivante :
<% form_tag({:action => 'add'}, {:id => 'formulaire'}) do %>
<%= render :partial => 'form' %>
<div id="formfooter">
<%= submit_tag "Ajouter" %>
</div>
<% end %>
ma vue d’édition contient le code suivant :
<% form_tag({:action => ‘edit’, :id => @contact}, {:id =>
‘formulaire’}) do %>
<%= render :partial => ‘form’ %>
<div id="formfooter">
<%= submit_tag "Modifier" %>
</div>
<% end %>
Mon formulaire est le suivant :
<%= error_messages_for ‘contact’ %>
<%= @page_title %>
Créé le <%= @creation %>
Renseignements administratifs
Civilité :
<%= select('contact', 'civilite',
Civilite::CIVILITE_TYPES,
{:prompt => "Choisir une civilite",
:selected => @civilite}) %>
Nom : <%= text_field 'contact', 'nom'
%>
Prénom : <%= text_field 'contact',
'prenom' %>
Adresse : <%= text_field 'contact',
'adresse' %>
Code Postal : <%= text_field 'contact',
'cp' %>
Ville : <%= text_field 'contact', 'ville'
%>
Téléphone : <%= text_field 'contact',
'tel' %>
Fax : <%= text_field 'contact', 'fax'
%>
GSM : <%= text_field 'contact', 'gsm'
%>
Email : <%= text_field 'contact', 'email'
%>
Entreprise
Entreprise : <%= check_box('contact',
'entreprise') %>
<%= if $entreprise1 == 1
render :partial => "entreprise_form"
#render :text => "contact associé "
end %>
</div>
<%= observe_field 'contact_entreprise',
:url=>{:action=>'check_relation_entreprise'},
:update=>"entreprise",
:with=>"'entreprise=' + escape(value)"
%>
<p><label>Code fonction : </label> <%=
select(‘contact’, ‘codefonction’,
Fonction::FONCTION_TYPES,
{:prompt => “Choisir un code fonction”,
:selected => @codefonction}) %>
Fonction : <%= text_field ‘contact’,
‘fonction’ %>
<div id="box-right">
<fieldset>
<legend>Ancien</legend>
<p><label>Ancien : </label><%= check_box 'contact', 'ancien'
%>
<%= observe_field ‘contact_ancien’,
:url=>{:action=>‘check_ancien’},
:update=>“ancien”,
:with=>"‘ancien=’ + escape(value)"
%>
Bonjour,
Tu peux donner ton message d’erreur.
2008/6/9 Fabrice Scoubidoo.bidoo [email protected]:
bonjour
Merci de t’intéresser à mon problème.
Justement je n’ai pas de message d’erreur lorsque je fait un ajout dans
la base, et que j’ai un champ qui n’est pas correct rails me le signale
bien.
(avec une CSS)
En revanche lors de l’update du même champs (quand je l’édite pour le
modifier) rien ne se passe si je met une valeur incorrecte. il laisse
l’enregistrement tel quel et je n’ai aucun message d’erreur comme s’il
ignorait ma CSS, pas le contole du champs, car sinon il validerait même
une valeur incorrecte mais ce n’est pas le cas, il ne valide pas, mais
sort comme si il n’y avait rien eu de modifié.
j’espère que je suis clair. 
Merci encore
tu peux montrer ton code de validation du modèle.
2008/6/9 Fabrice Scoubidoo.bidoo [email protected]:
mais je viens de m’appercevoir d’un truc c’est que l’update du champs ne
fonctionne plus même si je met une valeur correcte 
vraiment bizarre ce truc
(il ne faut pas tenir compte des commentaires, j’ai simplifié au maximum
pour trouver mon problème, je garde juste le numérique pour l’instant
voilà pour le code:
class Contact < ActiveRecord::Base
#Ce code à l’air d’avoir quelques soucis à l’affiche avec la mise Ã
jour d’un des composants je pense que c’est rails qui pose problème
voila.
#Permet de rendre obligatoire les champs suivants
#validates_presence_of :civilite, :nom, :prenom, :fonction, :tel
#validates_inclusion_of :civilite, :in => Civilite::CIVILITE_TYPES.map
{ |disp, value| value}
#Permet de forcer un champs avec une valeur numérique
validates_numericality_of :cp, :promo, :tel, :fax, :gsm #,
:allow_blank => true
#validates_format_of :email, :with =>
/^([^@\s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})$/
def self.localized_human_attribute_name(attr)
return case attr
when "civilite" then "Civilité"
when "nom" then "Nom"
when "prenom" then "Prénom"
when "adresse" then "Adresse"
when "cp" then "Code postal"
when "ville" then "Ville"
when "tel" then "Téléphone"
when "fax" then "Fax"
when "gsm" then "GSM"
when "email" then "E-mail"
when "nationalite1" then "Nationalité 1"
else attr.humanize
end
end
end
hum pas facile,
si tu as un exemple concret de champs qui bloque, l’état du tableau
params
au moment de la mise à jour et le code de mise à jour controlleur…
tient en parlant de ca ton code pour le formulaire appel la méthode
:edit
alors qu’elle devrait appeler :update cf :
<% form_tag({:action => ‘edit’, :id => @contact}, {:id =>
‘formulaire’}) do %>
devrait être si l’on garde les conventions rails :
<% form_tag({:action => ‘update’, :id => @contact}, {:id =>
‘formulaire’}) do %>
2008/6/9 Fabrice Scoubidoo.bidoo [email protected]:
bon j’ai corrigé le edit par update (au cas où) mais rien n’y fait, en
fait je pensais que mon problème venait de mon validate mais il semble
que non
en fait il ne prend pas en compte mon update (je test au niveau du
numéro de téléphone)
le code de mon controller est le suivant :
class GestionContactController < ApplicationController
def add
@page_title = ‘Ajouter un contact’
@liste_entreprise = Entreprise.find(:all)
if $entreprise1 == nil
$entreprise_init= 0
end
if params.has_key?( :contact )
@contact = Contact.new(params[:contact])
if @contact.save
redirect_to :action => ‘list’
else
render :action => ‘add’
end
end
end
def delete
@page_title = ‘Supprimer un contact’
Contact.find(params[:id]).destroy
redirect_to :action => ‘list’
end
def update
@page_title = ‘Modifier un contact’
@contact = Contact.find(params[:id])
@creation = @contact.created_on
@entreprise = @contact.id_entreprise
if @contact.id_entreprise != nil && $entreprise1 == 0
$entreprise1 = 1
end
@civilite = @contact.civilite
if params.has_key?( :contact )
contact_entreprise = params[:contact][:entreprise]
if contact_entreprise == "0"
params[:contact][:id_entreprise] = ''
end
@contact.update_attributes(params[:contact])
redirect_to :action => 'list'
end
end
def index
redirect_to :action => “list”
end
def list
@page_title = ‘Liste des contacts’
@contacts = Contact.find( :all )
$entreprise1=0
$entreprise_init=0
end
def check_ancien
contact_ancien = params[:ancien]
if contact_ancien == “1”
#render :text => $entreprise1
$ancien1=1
render :partial => “ancien_form”
else
$ancien1=2
#$entreprise_init=0
render :text => ‘’
end
end
def check_relation_entreprise
contact_entreprise = params[:entreprise]
if contact_entreprise == “1”
#render :text => $entreprise1
$entreprise1=1
render :partial => “entreprise_form”
else
$entreprise1=2
#$entreprise_init=0
render :text => ‘’
end
end
end
bonjour
bein si je remplace redirect_to par render par render, j’ai un beau
message d’erreur, mais là je vois pas pourquoi, ça se met à partir en
vrille comme ça
tout au début ça fonctionnait bien je vois pas ce qui
a été modifié pour planter mon truc comme ça :’( :
You have a nil object when you didn’t expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each
Extracted source (around line #16):
13:
Téléphone |
14:
|
15:
16: <%
@contacts.each do |contact| %>
17:
18: <%= contact.civilite %> |
19: <%= contact.nom %> |
Parameters:
{“commit”=>“Modifier”,
“authenticity_token”=>“8c06db071630466c53db337be8e04b62d5b3ef09”,
“contact”=>{“civilite”=>"",
“ville”=>"",
“fonction”=>"",
“nom”=>"",
“gsm”=>"",
“prenom”=>"",
“cp”=>"",
“tel”=>“22222”,
“entreprise”=>“0”,
“fax”=>"",
“adresse”=>"",
“id_entreprise”=>"",
“codefonction”=>"",
“email”=>"",
“ancien”=>“0”},
“id”=>“14”}
Remplace to redirect_to par render dans ta méthode update.
JB
On 09 Jun 2008, at 10:48, Fabrice Scoubidoo.bidoo wrote:
class GestionContactController < ApplicationController
redirect_to :action => ‘list’
end
@civilite = @contact.civilite
end
end
#$entreprise_init=0
else
$entreprise1=2
#$entreprise_init=0
render :text => ‘’
end
end
end
Posted via http://www.ruby-forum.com/.
–
Jean-Baptiste E.
Belighted.com | Web 2.0 Consulting & Training
Email : [email protected] | Phone: +32 486 377593
Ok merci à tous de votre aide
en fait c’était cette ligen qui foutait la zone :
@contact.update_attributes(params[:contact])
j’ai un peu modifié le code de la sorte et tout refonctionne nickel.
Merci encore
def update
@page_title = 'Modifier un contact'
@contact = Contact.find(params[:id])
@creation = @contact.created_on
@entreprise = @contact.id_entreprise
@civilite = @contact.civilite
if @contact.id_entreprise != nil && $entreprise1 == 0
$entreprise1 = 1
end
if params.has_key?( :contact ) and
@contact.update_attributes(params[:contact])
contact_entreprise = params[:contact][:entreprise]
if contact_entreprise == "0"
params[:contact][:id_entreprise] = ''
@contact.update_attributes(params[:contact])
end
redirect_to :action => 'list'
end
end
Le 9 juin 2008 11:33, Fabrice Scoubidoo.bidoo a écrit :
Et ce code, tu comptes le garder ?
if @contact.id_entreprise != nil && $entreprise1 == 0
$entreprise1 = 1
end
– Jean-François.
–
http://twitter.com/underflow_
Bonjour
oui je compte bien, pourquoi ? le seul truc qui me gêne dans ce code
c’est que je me dit qu’on doit pouvoir le mettre ailleurs mais je n’ai
pas trouvé où et comment donc en l’état je le garde.
mais je suis preneur d’autres solution plus “propres”
Fabrice
Jean-François Trân wrote:
Le 9 juin 2008 11:33, Fabrice Scoubidoo.bidoo a �crit :
Et ce code, tu comptes le garder ?
if @contact.id_entreprise != nil && $entreprise1 == 0
$entreprise1 = 1
end
– Jean-Fran�ois.
–
http://twitter.com/underflow_
Le 9 juin 2008 17:21, Fabrice Scoubidoo.bidoo a écrit :
oui je compte bien, pourquoi ?
parce que tu le vaux bien ?
le seul truc qui me gêne dans ce code c’est que je me dit
qu’on doit pouvoir le mettre ailleurs mais je n’ai
pas trouvé où et comment donc en l’état je le garde.
mais je suis preneur d’autres solution plus “propres”
selon ton déploiement, si tu as plusieurs instances FastCGI
ou plusieurs Mongrels, Thin, etc., comment ton code marche.
– Jean-François.
–
http://twitter.com/underflow_
A mon avis tu devrais reprendre ton code savoir ce que tu es en train de
faire :mon code sur mon appli avec a peut près les même champ:
def update
@address_book_contact = @address_book_firm.contacts.find(params[:id])
respond_to do |format|
if
@address_book_contact.update_attributes(params[:address_book_contact])
#ici tout est ok
flash[:notice] = ‘The Contact was successfully Update.’
format.html { redirect_to_firm(@address_book_firm)}
else
#ici non
format.html { render :action => “edit”}
end
end
end
2008/6/9 Fabrice Scoubidoo.bidoo [email protected]:
Le 9 juin 2008 17:30, slainer68 [at] gmail.com a écrit :
Juste pour t
Exprime-toi, slainer68.
– Jean-François.
–
http://twitter.com/underflow_
Jean-François Trân wrote:
Le 9 juin 2008 17:21, Fabrice Scoubidoo.bidoo a �crit :
oui je compte bien, pourquoi ?
parce que tu le vaux bien ?
Oui c’est vrai LOL
le seul truc qui me g�ne dans ce code c’est que je me dit
qu’on doit pouvoir le mettre ailleurs mais je n’ai
pas trouv� o� et comment donc en l’�tat je le garde.
mais je suis preneur d’autres solution plus “propres”
selon ton d�ploiement, si tu as plusieurs instances FastCGI
ou plusieurs Mongrels, Thin, etc., comment ton code marche.
Là je suis con où j’ai loupé un truc quel est le rapport entre les
instances ??? car en fait le code que tu m’indiques me sert uniquement Ã
afficher ou non un champs sur mon formulaire en fonction de son contenu
(si contenu il y a)
c’est lié à ça sur le _form
<p><label>Entreprise : </label><%= check_box('contact',
‘entreprise’) %>
<%= if $entreprise1 == 1
render :partial => "entreprise_form"
#render :text => "contact associé "
end %>
</div>
<%= observe_field 'contact_entreprise',
:url=>{:action=>'check_relation_entreprise'},
:update=>"entreprise",
:with=>"'entreprise=' + escape(value)"
%>
voilÃ
– Jean-Fran�ois.
–
http://twitter.com/underflow_