JeuWeb - Crée ton jeu par navigateur
[Rails] Questions / Réponses - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Rails] Questions / Réponses (/showthread.php?tid=5281)

Pages : 1 2 3 4


[Rails] Questions / Réponses - Holy - 20-01-2013

Bonjour à tous,

Je me permets de créer ce sujet qui accueillera toutes les questions triviales, basiques qui ne demandent pas réellement de créer un sujet à part entière. Ces questions concerneront le bien nommé Ruby on Rails.

J'inaugure ce question / réponse avec une question sur l'interpolation dans l'I18n. J'ai lu le guide concernant l'internationalisation mais j'ai rien trouvé concernant l'usage de fonction à l'intérieur de chaines de nos fichiers de langage.

J'aimerais créer un lien dans une de mes chaines. Voici ma solution :
fr:
rules_agreement: "En vous inscrivant, vous acceptez %{rules_link}..."
rules_link: le règlement du jeu

Et dans ma vue :
 = raw t('rules_agreement', :rules_link => link_to(t('rules_link'), rules_path))

Est-ce qu'il y a une autre façon de faire ?


RE: [Rails] Questions / Réponses - Sephi-Chan - 20-01-2013

C'est une bonne façon de faire.

Pour les pages très textuelles, pense aussi que tu peux créer des vues dédiées à une langue : genre new.fr.html.haml et new.en.html.haml. C'est très utile quand il y a plusieurs paragraphes qui n'ont pas une correspondance directe d'une langue à l'autre.

PS : pense à la syntaxe foo: 'bar' plutôt que :foo => 'bar'. :p


RE: [Rails] Questions / Réponses - Holy - 20-01-2013

(20-01-2013, 04:29 PM)Sephi-Chan a écrit : PS : pense à la syntaxe foo: 'bar' plutôt que :foo => 'bar'. :p
Je l'utilise parfois, mais à chaque fois, je suis tenté de remettre la plus longue. Ca doit être des restes de PHP Tongue

Sinon, j'ai un bug bizarre sur une de mes validations de format (firstname) :
    validates :firstname, :format => { with: /[-a-z ]/i },
:length => { within: 3..12 },
:presence => true,
:uniqueness => { case_sensitive: false, scope: :lastname }

validates :lastname, :length => { within: 3..17 },
:format => { with: /[a-z -']/i },
:if => lambda { |hero| !hero.lastname.blank? }
J'ai l'impression qu'elle ne fonctionne pas du tout. Quand je rentre D4m13n dans mon formulaire, ça passe quand même alors que les autres conditions (présence, unicité, longueur) fonctionnent. Je suis passé à coté d'un truc énorme (un truc en relation avec le scope peut-être) ?


RE: [Rails] Questions / Réponses - Sephi-Chan - 20-01-2013

Erreur classique. Petite démo sur Rubular.
Il faut plutôt utiliser cette regexp ^[-a-z ]+$.


RE: [Rails] Questions / Réponses - Holy - 20-01-2013

(20-01-2013, 05:06 PM)Sephi-Chan a écrit : Erreur classique. Petite démo sur Rubular.
Il faut plutôt utiliser cette regexp.
C'est pas le même comportement que sous PERL si je ne me trompe pas (les regex ont jamais été ma spécialité). Je comprends pas trop pourquoi il faut indiquer ^ et $ (début et fin de chaine) ? Y a un truc qui m'échappe ^^


RE: [Rails] Questions / Réponses - Sephi-Chan - 20-01-2013

Ta regexp s'assure seulement que l'un des caractères que tu donnes est trouvé. C'est pour ça que D4m13n correspond.
La mienne s'assure que — du début à la fin de la chaîne — tous les caractères correspondent à ceux indiqués.

Rubular est un précieux allié, ainsi que le très bon Regexper (dommage qu'il ne permette pas de créer un permaling vers l'explication d'une regexp).


RE: [Rails] Questions / Réponses - archANJS - 20-01-2013

Dans le premier exemple, c'est comme si tu indiquais à Ruby: "Trouve-moi toutes les lettres, espaces et tirets dans ces données.", tandis que dans le deuxième, tu lui indiques plutôt: "Trouve-moi tous les mots contenant que des lettres, espaces et tirets dans ces données.".

EDIT: zut, devancé. +1 Sephi.


RE: [Rails] Questions / Réponses - Plume - 20-01-2013

(20-01-2013, 05:29 PM)archANJS a écrit : Dans le premier exemple, c'est comme si tu indiquais à Ruby: "Trouve-moi toutes les lettres, espaces et tirets dans ces données.", tandis que dans le deuxième, tu lui indiques plutôt: "Trouve-moi tous les mots contenant que des lettres, espaces et tirets dans ces données.".

EDIT: zut, devancé. +1 Sephi.

C'est inexact. La deuxième veut dire : "Capture la chaine entière si elle ne contient que des lettres, des espaces et/ou des tirets".


RE: [Rails] Questions / Réponses - Holy - 20-01-2013

(20-01-2013, 09:59 PM)Plume a écrit :
(20-01-2013, 05:29 PM)archANJS a écrit : Dans le premier exemple, c'est comme si tu indiquais à Ruby: "Trouve-moi toutes les lettres, espaces et tirets dans ces données.", tandis que dans le deuxième, tu lui indiques plutôt: "Trouve-moi tous les mots contenant que des lettres, espaces et tirets dans ces données.".

EDIT: zut, devancé. +1 Sephi.

C'est inexact. La deuxième veut dire : "Capture la chaine entière si elle ne contient que des lettres, des espaces et/ou des tirets".
Effectivement. Je confirme par ailleurs que sous PERL y a pas besoin d'indiquer ces délimiteurs pour matcher, pour une fois Ruby est plus explicite (c'est pas plus mal).

Sinon, j'ai encore un petit soucis, la version de ma regex actuelle est celle-ci /^[a-z -]+$/i. Sur Rubular, ça matche bien les espaces (exemple "Pierre Francois" est matché), par contre dans mon appli ça capture pas les espaces (Pierre Francois me renvoie une erreur de validation). Pourtant c'est à la lettre près la même regex ^^

Edition : J'ai trouvé d'où le bug vient. Il semblerait que lors de la mise en forme des donnée "cachées" dans le balise <script> que la gem utilise pour la validation coté client il supprime l'espace de ma regex. Ca sux. Je vais ouvrir une issue sur leur github Smile

Edition Bis : une issue a été ouverte il y a quelques jours à ce sujet. Il existe un moyen de détourner le bug en remplaçant les espaces par leur équivalent hexadécimal (\x20).


RE: [Rails] Questions / Réponses - Holy - 22-01-2013

Yop,

Question du jour : est-il possible de rendre ce code Dry en jouant avec les routes :
class UsersController < ApplicationController
def new
@title = 'register'
@user = User.new
@user.build_hero
@race = Race::NAMES['klum']
end

def create
@user = User.new(params[:user])

if @user.save
render 'home/index'
else
@title = 'register'
@race = Race::NAMES[params[:user][:hero_attributes][:nation]]
@race = Race::NAMES['klum'] if @race.empty?

render 'new'
end
end

Histoire de contextualiser un peu (même si c'est facilement compréhensible). J'ai une vue dédiée à ma page d'inscription, lorsque l'utilisateur soumet le formulaire, il est envoyé vers users#create qui sauve le nouvel utilisateur si il n'y a pas d'erreurs de validation. Dans le cas contraire, je renvoie l'utilisateur vers le formulaire d'inscription.

Je me demandais si il n'était pas possible de faire autrement afin de ne pas avoir à répéter deux fois mes variables d'instance @title et @race (notamment). Y aurait sans doute moyen de jouer en identifiant le type de requête (post ou get).