#306

Comment gérer les utilisateurs et leurs rôles avec une liaison has_one

Je me suis arraché les cheveux pour trouver la bonne manière de gérer un cas d’utilisation relativement courant dans une application web : ayant un modèle (et une table) User, je souhaitais pouvoir affecter un utilisateur à chaque modèle Account (stocké dans une table … accounts) en tant que Manager. Bien entendu, je souhaitais pour voir accéder à mon manager en faisant :

a = Account.first
a.manager = User.first

En fait c’est très simple, en utilisant les options disponibles dans les associations. On aura donc dans le modèle Account une association belongs_to :

class Account < ActiveRecord::Base
  belongs_to :manager, :class_name => 'User'
end

Au lieu de faire simplement un belongs_to :user, on indique à Rails le modèle qui doit être utilisé.
Dans le modèle User, on aura l’association inverse :

class User < ActiveRecord::Base
  has_one :account, :foreign_key => 'manager_id'
end

Afin que Rails puisse retrouver l’utilisateur à partir de la table accounts, il faut bien sûr désigner la colonne qui va héberger l’identifiant de l’utilisateur grâce au paramètre :foreign_key.

Vous aurez bien entendu ajouté cette colonne à la table accounts en créant une migration :

rails g migration AddManagerIdToAccount

Qui contiendra le code suivant :

class AddManagerIdToAccounts < ActiveRecord::Migration
  def change
    add_column :accounts, :manager_id, :integer
  end
end

Vous pouvez ensuite exécuter la migration, et  le tour est joué !

Un terminal en couleurs pour MacOS X

Utilisateur depuis quelques mois d’un MacBook Air, je me demandais comment retrouver dans le terminal le même choix de couleurs que celui dont je bénéficiais sur ma machine Ubuntu. Voici une recette pour mettre de la couleur dans votre terminal.

Ouvrez un terminal, et éditez le fichier .bashrc qui se trouve à la racine de votre dossier utilisateur :

vim ~/.bashrc

Mettez-vous en mode insertion en tapant [i], puis collez les lignes suivantes :

export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced

Enregistrez le fichier en tapant la touche [ESC] puis les touches [:x] . Pour recharger vos préférences, tapez :

source ~/.bashrc

Et le tour est joué !

 

Installer RVM et Rails sur Ubuntu

RVM permet d’installer facilement plusieurs environnement Ruby sur une même machine. Mais il apporte un tel confort dans l’installation de Ruby (et en particulier de la version 1.9.2 qui n’est pas encore dans les dépôts officiels de Canonical) que même pour une seule version de Ruby, je ne saurais plus m’en passer !

A l’occasion du recyclage d’un vieux PC, j’ai eu l’occasion de rejouer une installation complète de RVM, dont je note ici les différentes étapes. Notez bien que cette installation n’est valable que pour l’utilisateur courant.

  • Ouvrez le Terminal d’Ubuntu
  • Optionnel : installez curl et git s’ils ne sont pas encore installés
sudo apt-get install curl git
  • Placez vous dans votre répertoire home
cd ~
  • Installez la dernière version de RVM
bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )
  • RVM s’installe dans  ~/.rvm/  ; à la fin de l’installation, ajoutez le chargement de RVM dans votre shell
echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile
  • Fermez votre Terminal, puis rouvrez le.
  • Tapez rvm list known : rvm doit vous donner la liste de toutes les version de Ruby disponibles
  • Installez également les paquets suivants qui sont requis par RVM
apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion
  • Pour installer la version 1.9.2 de Ruby, tapez :
rvm install 1.9.2
  • L’installation de Ruby commence. Lorsqu’elle est terminée tapez :
rvm --default ruby-1.9.2
  • Rvm doit vous indiquer avoir sélectionné la version 1.9.2 de Ruby, qui sera utilisée par défaut lorsque vous ouvrirez un terminal. Pour vérifier, tapez :
ruby -v
  • Ruby doit alors vous indiquer son numéro de version. Tout fonctionne ! Pour changer de version de Ruby, installez-en une autre puis utilisez la commande suivante :
rvm use <no_version>
  • Par exemple
rvm use 1.8.7
  • Pour installer Rails, tapez la commande suivante (en rajoutant -v=x.x.x si vous voulez installer une version précise) :
gem install rails
  • Optionnel : si comme moi, vous avez un message d’erreur en installant rails indiquant l’absence de zlib, vous pouvez essayer les commandes suivantes :
rvm pkg install zlib
rvm remove 1.9.2
rvm install 1.9.2
  • Relancez ensuite l’installation de Rails

Démarrer avec iOS : une application Carnet d’Adresses

M’étant récemment lancé dans le développement d’applications pour les plateformes mobiles d’Apple, je commence un série d’articles qui me serviront de bloc-note et d’aide mémoire pour le développement d’applications iOS.
Mon premier projet est la transcription sous iOS de ma première application Rails : un carnet d’adresses pour gérer les coordonnées de mes amis et de ma famille.
Comme cette série d’article accompagne ma première expérience sous iOS, vous me pardonnerez les approximations et les erreurs que les experts relèveront sans doute ; leurs commentaires sont les bienvenus !

Pour démarrer

Pour démarrer le développement sous iOS, il vous faut :

  • Un Macintosh Intel sous MacOS X 10.6 (Snow Leopard) ou MacOSX 10.7 (Lion)
  • Un compte développeur Apple, pour pouvoir télécharger le SDK (Software Development Kit). Il existe deux niveaux d’accès en tant que développeur : le premier est gratuit, mais ne permet pas d’exécuter les applications développées autrement que dans le simulateur (sur votre Mac, et pas sur un appareil iOS) ; le second est payant ($99 par an), mais permet d’exécuter vos applications sur un iPhone ou un iPad, ainsi que de publier vos applications sur l’AppStore. Enfin, cet abonnement permet de télécharger la version Snow Leopard d’XCode 4, la dernière version de l’environnement de développement d’Apple. Une version payante pour Lion est disponible dans l’AppStore Mac OS X, ainsi qu’une version gratuite de la version 3 d’XCode (mais je ne vous la recommande pas, elle commence à dater).
  • Un iDevice pour pouvoir tester en vraie grandeur vos applications. la solution la moins onéreuse, c’est l’iPod Touch qu’on trouve maintenant à partir de 199€ ; mais si vous voulez utiliser des fonctions spécifiques à l’iPhone ou à l’iPad (téléphone, géolocalisation, etc.), il vous faudra acquérir ou vous faire prêter le matériel adéquat.

Créer son projet

Une fois XCode installé, vous pouvez le lancer pour commencer notre projet. Vous arrivez sur la fenêtre suivante :
Cliquez sur Create a new XCode Project. Comme c’est un projet d’apprentissage, nous allons choisir comme modèle Empty Application.
Choisissez ensuite :

  • Un nom à votre projet : c’est celui qui sera par défaut affiché comme nom d’application.
  • Votre identifiant de société : peut être l’adresse de votre site web en commençant le Top Level Domain (com, fr, org, etc)
  • La variable Class Prefix est également importante puisqu’on la retrouvera devant les objets créés automatiquement par XCode.
  • L’appareil cible : iPad, iPhone ou Universal pour les applications qui tourneront sur les deux types d’iDevice.
  • Trois cases à cocher sont ensuite disponibles : nous allons cocher Use Core Data afin qu’XCode initialise un peu de code pour gérer la persistance de vos contacts (c-a-d leur stockage dans une base de données). Les deux autres permettent de gérer automatiquement la mémoire de votre application, et d’inclure l’architecture des tests unitaires qui si vous les écrivez, vous permettront de vérifier que les modifications dans votre code ne cassent pas votre application. Nous les laisserons de coté pour ce premier exemple.

Cliquons ensuite sur le bouton Next. La boite de dialogue suivante permet de choisir l’emplacement de votre projet sur votre disque ; cochez également la case Create git repository for this project, afin de pouvoir gérer vos modifications de code facilement avec Git.
Cliquez sur le bouton Create : Votre projet est créé, nous allons pouvoir commencer à rentrer dans le vif du sujet…
La suite au prochain épisode !

jQuery Mobile 2e partie : les vues

Le précédent article de notre série sur jQuery Mobile annonçait une suite sur la gestion des vues dans jQuery. Je gère l’affichage des contacts avec un Partial qui est inséré dans la vue elle-même. On a donc la hiérarchie suivante :

Layout => Vue => Partial

Nous avons vu dans l’article précédent l’architecture du Layout, et une partie de la vue elle-même,dont le code complet est donné ci-dessous :

<% content_for :back do %><%= link_to t(:"general.back"),  params[:category] ? categories_path : root_path, :'data-direction'=>"reverse", :'data-icon'=>"arrow-l"  %><% end %>
<% content_for :title do %><%= params[:category] ? Category.find(params[:category]).name : t(:"contact.all") %><% end %>
<% content_for :button do %> <%= link_to t(:"contact.add"), new_contact_path, :'data-icon'=>"add", :rel => "external" %> <% end %>
<%= render "contacts_list" %>
Dans jQM, l'architecture d'une liste est la suivante :
<ul data-role="listview">
	<li>Item 1</li>
	<li>Item 2</li>
	<li>Item 3</li>
</ul>

L’adjonction du data-role « listview » à une combinaison classique ul/li permet de générer une liste dont le rendu est similaire à celui trouvé sur les applications mobiles.

 

 

Le code source du Partial est le suivant :

<ul id="contactslist" data-role="listview"  data-filter="true" data-filter-placeholder="Filtrer la liste..." data-inset="true" class="separator">
  <% @contacts.each do |contact| %>
      <li class="contact"><%= link_to  contact.listname, contact %></li>
    <% end %>
</ul>

Les paramètres passés dans le tag <ul> sont les suivants :

  • data-role : doit être égal à « listview » pour être reconnu par jQM comme une liste.
  • data-filter : si positionné à TRUE, permet d’afficher un champ de filtre au-dessus de la liste ; ne filtre que les données existant dans la liste, alors attention à la pagination !
  •  data-filter-placeholder : permet de modifier le texte par défaut  affiché dans le champ de filtre.
  • data-inset : si positionné à TRUE, permet d’avoir une liste qui ne s’étend pas d’un bord à l’autre de la fenêtre, mais qui laisse un espace sur les bords de la liste ; la première et la dernière cellule voient de plus leurs bords s’arrondir.

Dans le prochain article, nous verrons la création de formulaires avec jQM. D’ici là, n’hésitez pas à laisser vos commentaires !