Re: Insertion dans une table avec une cle primaire varchar


#1

Bonsoir Allnighter,

@candidat.PASSWORD = params[:candidat][:PASSWORD]

cette méthode est plus longue certe et surtout moins élégante, mais elle
permet de débloquer le problème. j’avait remarqué que les requetes
“Insert into” généré par rails ne contenaient pas le champ (CIN) clé de
la table Candidat.

ya ptêtre une condition d’unicité sur la clé primaire CIN Ã
vérifier ou le SGBDR va s’en occuper ?

Jean-François,
le champ email n’est pas obligatoire, comment je peux le checker que
s’il n’est pas vide? Merci

pourquoi pas :

validates_format_of :name, :with => MA_BELLE_REGEX, :if => Proc.new {
|r| r.name? }

ou :

validates_each :name, :allow_nil => true do |model, attr, value|
unless value =~ MA_BELLE_REGEX
model.errors.add(attr, “#{value} is not an email adress.”)
end
end

En parlant de belle expression rationnelle, il y a un plug-in qui
essaie de valider une adresse électronique au sens RFC822 du
terme,

https://svn.greenpeace.org/repositories/rails_plugins/validates_as_email/

j’ai pas vraiment vérifié si c’était 100% rfc-compliant, mais la regex
proposée a néanmoins fière allure :

module RFC822
EmailAddress = begin
qtext = ‘[^\x0d\x22\x5c\x80-\xff]’
dtext = ‘[^\x0d\x5b-\x5d\x80-\xff]’
atom = ‘[^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-’ +
‘\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+’
quoted_pair = ‘\x5c[\x00-\x7f]’
domain_literal = “\x5b(?:#{dtext}|#{quoted_pair})\x5d"
quoted_string = "\x22(?:#{qtext}|#{quoted_pair})
\x22”
domain_ref = atom
sub_domain = “(?:#{domain_ref}|#{domain_literal})”
word = “(?:#{atom}|#{quoted_string})”
domain = “#{sub_domain}(?:\x2e#{sub_domain})"
local_part = "#{word}(?:\x2e#{word})

addr_spec = “#{local_part}\x40#{domain}”
pattern = /\A#{addr_spec}\z/
end
end

(dans lib/validates_as_email.rb)

même si, Allnighter, dans ton cas et dans la majeure partie des
cas, une validation de removed_email_address@domain.invalid suffit…

-- Jean-François.

#2

cette méthode est plus longue certe et surtout moins élégante,
mais elle permet de débloquer le problème.

Peut-être un peu plus “Ruby-way” …

@candidat, h = Candidat.new, params[:candidat]
%w(CIN NOM_CANDIDAT PRENOM PASSWORD).each do |a|
@candidat.send("#{a}=", h[a])
end

euh, sinon j’étais en train de passer que tu pouvais passer le paramètre
:id au lieu de :CIN dans ton formulaire, a priori, non ?

РJean-Fran̤ois.