Développement Web Ruby
par Sylvain CLAUDEL

Derniers posts

Activerecord-import le gem nécessaire pour les gros imports de données

Date d'édition 2011-04-13 à 19:36

Le Activerecord-import permet de faire des gros imports de données. Lors d'un gros import de données, au lieu de faire des saves à tire-larigot, il vaut mieux mettre les objets à sauvegarder dans un array. Puis vous importez l'array.

C'est ce que Activerecord-import fait ! Attention il fait les INSERT mais pas les UPDATE.

@products_array = []
4000.times do |i|
   @products_array << Product.new(:ref => "bla" + i.to_s)
end
Product.import @products_array

La methode import vient du gem !

Adresse du gem : https://github.com/zdennis/activerecord-import

Pour l'installer dans le gem dans le gemfile :


gem "activerecord-import", ">= 0.2.0"

Puis bundle install

Walygator saison 2011 ouverte

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

Pas de grand rapport avec la programmation et le web, mais bon je me devais de faire un article sur walygator puisque j'étais invité à l'inauguration VIP de la saison 2011, spectable, petit-four, hotdog, champagne, attractions en tout genre et le grand huit inversé : the monster. Hum il est impressionnant, très rapide et beaucoup d'accélération. Voici une photo :

La parc a été racheté, il y a 5 ans par deux frères Claude et Didier Le Douarin, qui sont très sympatiques, donc si vous êtes en moselle et que vous voulez passer un bon moment, venez donc à Walygator : https://www.walygatorparc.com/

Pendule : le plugin chrome indispensable pour le développeur web

Date d'édition 2011-03-31 à 10:11

J'ai cherché assez longtemps pour trouver un outil de mesure ( ruler ou règle ) de pixel. Bien pratique pour l'intégration, il suffit d'ouvrir une image avec chrome, et vous pouvez mesurer les portions de l'image. Attention pendule n'est pas une simple règle mais le plugin fait aussi colorpicker (avec copie automatique dans le presse papier) et plein d'autre chose, il remplace la web developper toolbar de firefox porté sur chrome. Voici une capture d'écran :

Vous pouvez télécharger le plugin ici : Pendule Chrome

Petites actuces pour rubyonrails 3

Date d'édition 2011-03-23 à 18:52

Voici des petites actuces pour rubyonrails 3.

Obtenir le controlleur courant

controller.controller_name

Obtenir la méthode courante

controller.action_name

Récupérer l'host

request.env['HTTP_HOST']

Récupérer le useragent

request.env['HTTP_USER_AGENT']

Récupérer l'adresse ip du visiteur

request.env['REMOTE_ADDR']

Obtenir le referer

request.env['HTTP_REFERER']

Dans un controlleur, ce bout de code permet d'utiliser ma_methode dans les controllers comme dans les vues

helper_method :ma_methode

def ma_methode
   return "Hello World !"
end

Dans les routes si vous voulez plusieurs niveaux de profondeur qui pointent sur la même action

match '*fil/ma-methode' => 'controller/action'

match 'ma-methode' => 'controller/action'

Ainsi :

www.example.com/bla/bla/bla/ma-methode
www.example.com/bla/bla/ma-methode
www.example.com/ma-methode

Ces adresses pointent au même endroit, params[:fil] permet de récupérer le tableau des répertoires virtuels

Attention dans ce cas au duplicate content !

J'espère que ces petites astuces pour rails 3 vous serviront.

to_json : inclure (include) des sous models et des méthodes dans la serialisation

Date d'édition 2011-03-23 à 09:09

Bon le to_json c'est cool mais il vous manque des informations dans votre sérialisation ? Pas de soucis il existe des options à to_json :

:include => :model_a_inclure(s) ou pour une méthode :methods => :ma_method

Par exemple si vous voulez sérialiser un product avec sa famille (product belongs_to family, family has_many products):

Product.find(1).to_json(:include => :family)

Si vous voulez sérialiser une famille avec ses products :

Family.first.to_json(:include => :products)

Ici to_json ne permet pas de faire des filtres sur les données (j'entends certains produits dans notre cas, il est possible de filtrer les champs voir en bas de l'article)

La méthode que j'ai utilisé pour filtrer les models :

Un scope dans produit qui ne récupère que les produits visibles :

scope, :visible, where(:visible => true)

Puis dans family, j'ajoute une méthode qui récupère ses produits visibles et les sérialisent.

def visible_products

   return JSON.parse(self.products.visible.to_json)

end

Enfin pour sérialiser, la méthode va appeler visible_products sur family :

Family.first.to_json(:methods => :visible_products)

(Voir l'article précédent pour le pretty print du JSON)

Enfin il est possible via :only et :except de virer des champs lors de la sérialisation.

Pour plus d'info la doc complete : https://ar.rubyonrails.org/classes/ActiveRecord/Serialization.html#M000049

Développement ruby et geekeries - rivsc