Développement Web Ruby
par Sylvain CLAUDEL

Derniers posts

Récupérer la liste des attributs ou champs d'un model rubyonrails

Date d'édition 2011-10-07 à 16:10

Comment récupérer la liste des attributs ou champs d'un model rubyonrails  ?

Bon la réponse tient en une seule ligne :

Model.attribute_names

Si on veut un plus le type, il faut utiliser columns_hash :

Model.columns_hash["ma_colonne"].type

Et si on veut encore en plus le type en base de données (sql) :

Model.columns_hash["ma_colonne"].sql_type


Source : https://thewebfellas.com/blog/2009/4/14/accessing-column-information-with-activerecord

Rails i18n - Mettre un texte de remplacement si la traduction n'existe pas

Date d'édition 2011-10-07 à 09:57

Après lecture du code source du module i18n de rails j'ai trouvé. Donc pour mettre un texte de remplacement si une traduction n'existe pas (translation missing), il faut utiliser l'option default pour la méthode t (translate).

Exemple avec une traduction présente :

t(:hello)

#=> "hello"

Exemple avec une traduction absente :

t(:test)

#=> "<span class=\"translation_missing\" title=\"translation missing: en.test\">Test</span>"

Donc si vous faites ceci vous n'avez plus d'erreur :

t(:test, :default => "texte par défaut")

#=> "texte par défaut"

Pour tester en console il faut créé une instance ActionView et précéder la fonction t de cette instance, comme suit : 

av = ActionView::Base.new

av.t(:hello)

Sinon sur le net, un développeur propose une super idée : personnaliser l'exception levé  et faire appel à l'API de Google traduction

Voici le code pour cette 2ème solution (enfin vue que l'API va devenir payante) :


module I18n
  class << self
    def raise_custom_exception(exception, locale, key, options)
      if MissingTranslationData === exception
        # do something with the missing translation
        return translation
      else
        raise exception
      end
    end
  end
end
I18n.exception_handler = :raise_custom_exception
Url de la discussion : https://www.ruby-forum.com/topic/220355

Number to human : chiffre en lettre en ruby avec rubyonrails

Date d'édition 2011-09-29 à 09:40

Bon voilà dans rubyonrails, il y a un helper : number_to_human, qui est bien intéressant :

https://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_to_human

Il utilise locale pour la langue (français, anglais, ...), donc avec un petit script on peut faire une conversion de nombre en français en ruby :

chiffre="2235516516516"
caption = []
i = 0
chiffre.each_char do |c|
  mavar = ActionView::Base.new.number_to_human(chiffre[i..chiffre.length].to_i,
  :precision => 6,
  :significant => false,
  :locale => :fr)
  mavar = mavar.pluralize if c.to_i > 1
  caption << mavar.gsub(/,(\d+)/, "")
  i += mavar[/(\d+)/].length
  break if i >= chiffre.length
end
caption.join(" ")

Préparer MarkItup pour rails 3.1

Date d'édition 2011-09-26 à 16:30

Bon voilà dans l'attente d'un gros article, en voici un plus petit qui explique comment préparer markitup pour rails 3. Je pars du principe que vous êtes dans votre projet rails.

Téléchargez markitup. Copiez le répertoire "markitup" de l'archive dans stylesheets et également dans javascripts. (De cette manière il n'y aura plus qu'à remplacer le répertoire pour une mise à jour de markitup)

Dans la vue ou le layout :

<%= stylesheet_link_tag "markitup/skins/markitup/style.css",

    "markitup/sets/default/style.css" %>

<%= javascript_include_tag "markitup/jquery.markitup.js",

        "markitup/sets/default/set.js"; "initialize_markitup.js" %>

Et dans le fichier "initialize_markitup.js" :

$(function(){

    $('.monmarkitup').markItUp(mySettings);

});

Mettez ensuite dans votre code html un div avec pour classe "monmarkitup" et ça devrait marcher.
N'oubliez pas d'include également jQuery si ce n'est déjà fait. 

Pour ActiveAdmin - La procédure est la même pour les autres éditeurs WYSIWYG

Grosse parenthèse pour include markitup dans active_admin, il faut ajouter dans initializers/active_admin.rb :

config.register_javascript 'markitup/jquery.markitup.pack.js'

config.register_javascript 'markitup/sets/default/set.js'

config.register_javascript 'initialize_markitup.js'

config.register_stylesheet 'markitup/skins/markitup/style.css'

config.register_stylesheet 'markitup/sets/default/style.css'

# Attention le fichier ci-dessous est à créer :

config.register_stylesheet 'reset_markitup.css'

Le reset_markitup.css permet de pas tout péter dans l'interface :

.formtastic div:first-of-type{

  display:inline-block;

}

Et dans votre fichier app/admin/model.rb section form do, il faut ajouter ceci au champ concerné.

input_html => { :class => "monmarkitup" } 

Exemple :

form.input :title, :input_html => { :class => "monmarkitup" }

Coté serveur, il existe quelques gems pour convertir votre code en html :

BBCODE : bb-ruby

TEXTILE : RedCloth

MARKDOWN : BlueCloth

Bon code !

Rails generate scaffold_controller

Date d'édition 2011-09-26 à 08:56

La commande "rails generate scaffold_controller" permet de générer les vues / routes / controller associés à un model déjà existant. Malheureusement il ne va pas chercher les attributs du model, mais c'est tout de même bien pratique pour créer deux controllers pour un seul model. 

Du coup il faut l'utiliser de la même manière que rails generate model :

rails generate model nom_du_model attribut:type attribut:type

rails generate scaffold_controller nom_du_model attribut:type attribut:type

Développement ruby et geekeries - rivsc