Forum: Rails France Re: Insertion dans une table avec une cle primaire varchar

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
13ea48f056b19349027d2f4a6921a46a?d=identicon&s=25 Jean-François (Guest)
on 2006-05-29 23:28
(Received via mailing list)
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_plug...

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 foo@bar.truc suffit...

    -- Jean-François.
13ea48f056b19349027d2f4a6921a46a?d=identicon&s=25 Jean-François (Guest)
on 2006-05-29 23:47
(Received via mailing list)
> 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.
This topic is locked and can not be replied to.