Développeur Web RoR

Aller au contenu | Aller au menu | Aller à la recherche

Tag - rubyonrails

Fil des billets

mardi 11 juillet 2017

Manipuler les migrations SchemaMigrations dans une console rails [RAILS 4 / 5]

Pour réparer une boulette, je suis tombé là-dessus pour manipuler les migrations en console rails et c'est bien pensé :

http://stackoverflow.com/questions/19100303/schema-migrations-table

En résumé on définit un model pour mapper la table schema_migrations (vous pouvez taper ceci tel quel en console) : 

class SchemaMigration < ActiveRecord::Base; self.primary_key = :version; end

On a ensuite accès à l'api ActiveRecord. Du coup j'ai corrigé ma bêtise comme ça : 

SchemaMigration.where(version: '20161020124307').first.update_attribute(:version, '20161026065007')

lundi 17 juin 2013

Eviter de tester la non nullité lors d'un chaînage de méthode en ruby avec try (avec RubyOnRails)

Il peut arriver d'avoir ce genre de code :

command.contact_delivery.name

Ici vous êtes obligé de tester que command et contact_delivery ne sont pas nil. RubyOnRails a ajouté une méthode à Object qui permet d'essayer d'accéder à une méthode. Elle s'appelle try.

Voyez plutôt :

command.try(:contact_delivery).try(:name)

Source : 

https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/object/try.rb

http://api.rubyonrails.org/classes/Object.html#method-i-try

mercredi 17 octobre 2012

2 tables de jointure différentes entre 2 mêmes models

Bon le titre est un peu capilo-tracté. L'explication qui va suivre presque tout autant.
Imaginons vous avez un model User et un model Book. On veut modéliser une relation "à participé à la rédaction de" et une relation "à lu". Dans ce cas des tables de jointure s'impose.
Pour une table de jointure pas de problème, on suit les conventions : (nom des models au pluriel triés par ordre alphabétique et séparés par "_"). Mais dans ce cas nous avons deux tables de jointure et nous ne voulons pas confondre les données. Voici comment procéder :
Créer les tables de jointure :
rails g migration join_table_users_books
Ouvrez le fichier générer et mettez-y la création des tables de jointure
def up
  create_table :reading, :id => false do |t|
    t.integer :user_id
    t.integer :book_id
  end
  add_index :reading, [:user_id, :book_id]
  create_table :writing, :id => false do |t|
    t.integer :user_id
    t.integer :book_id
  end
  add_index :writing, [:user_id, :book_id]
end
def down
  drop_table :reading
  drop_table :writing
end
Ensuite ajoutez les relations habtm dans les models :
class User < ActiveRecord::Base
  has_and_belongs_to_many :readed_books, :class_name => "Book", :join_table => "reading"
  has_and_belongs_to_many :written_books, :class_name => "Book", :join_table => "writing"
end
class Book < ActiveRecord::Base
  has_and_belongs_to_many :readed_by_users, :class_name => "User", :join_table => "reading"
  has_and_belongs_to_many :written_by_users, :class_name => "User", :join_table => "writing"
end
Vous pouvez maintenant faire :
User.first.readed_books
User.first.readed_book_ids
u = User.first
u.readed_books << Book.limit(3).all
u.save
Voilà il ne reste plus qu'à appliquer ceci dans votre cas.
 

vendredi 24 août 2012

Comment éviter le DoubleRenderError dans rails 3 ?

Il va de soit qu'il est infiniment profitable de faire des conditions propres avec des render et des redirects qui vont bien. Mais dans certain cas il peut être intéressant d'annuler les précédents render et redirect dans l'action d'un controller (dans mon cas c'est pour traiter le render ou redirect après l'appel à super).


- Avec RubyOnRails 2.3

erase_render_result

erase_redirect_result

- Avec RubyOnRails 3.2

self.instance_variable_set(:@_response_body, nil)

Merci à @5pidou pour m'avoir donné la version rails 2.3, ce qui m'a permis de trouver la version 3.2

Source : http://stackoverflow.com/questions/4684486/how-to-render-a-view-normally-after-using-render-to-string

vendredi 10 février 2012

Liste des TimeZone de RubyOnRails

Voilà la commande magique qui renvoie la liste des TimeZone de Rails :

ActiveSupport::TimeZone.all

Si vous voulez les afficher en console :

ActiveSupport::TimeZone.all.map(&:tzinfo).each{ |tz|  puts tz  }

Si vous voulez changer la TimeZone de ruby pour Casablanca (Maroc, Afrique): 

Time.zone = "Casablanca"

Pour vérifier :

Time.zone

Ou Paris :

Time.zone = "Paris"

Time.zone

Pour la changer dans rails : 

Rails.configuration.time_zone = "Paris"

Bon code.

mardi 29 novembre 2011

Emploi : Développeur Web RubyOnRails sur Paris et Lille

J'ai dans mes contacts deux entreprises qui cherchent des développeur Web RubyOnRails.

Wype, une jeune Web Agency Parisienne est à la recherche d'un développeur web RubyOnRails (CDI, Salaire négociable), voici l'annonce :

-> http://remixjobs.com/emploi/Developpement/Developpeur-Ruby-on-Rails-H-F/11380

Une autre entreprise Lilloise SiliconSalad cherche également un développeur web RubyOnRails (CDI, Salaire négociable), voici l'annonce :

-> http://remixjobs.com/emploi/Developpement/Developpeur-Ruby-on-Rails-H-F/11547

Je leur souhaite de trouver chaussure au poste de travail, elles le méritent !

mercredi 15 juin 2011

API Poster sur twitter en ruby

Depuis quelques temps déjà twitter demande l'inscription d'une application pour poster via l'API. Bon je ne vais pas vous expliquer comment courtourner le système ! Avec le gem twitter, pas très compliqué, le seul problème c'est que le gem n'est compatible que ruby 1.9 donc pour les applications rubyonrails en ruby 1.8 c'est mort.

1) En premier inscrire une application sous votre compte twitter (il faut déjà un compte twitter).

à Cette adresse : https://dev.twitter.com/apps/new , mettez ce que vous voulez mais Application Type: client et  Default Access type: read & write ensuite récupérez vos :

consumer_key (disponible sur la page de l'application)

consumer_secret (disponible sur la page de l'application)

oauth_token (il faut cliquer sur "My Access Token" dans le menu à droite)

oauth_token_secret (il faut cliquer sur "My Access Token" dans le menu à droite)

2) Donc installation du gem 

sudo gem install twitter 

Si vous utilisez rvm il faut utiliser l'executable gem de ruby d'rvm 

rvm 1.9.2

gem install twitter

3) Script d'exemple :

#======================== Poster sur twitter =======================
# Plus de docs sur http://twitter.rubyforge.org/
require 'rubygems'
require 'twitter'
Twitter.configure do |config|
  config.consumer_key = "XXXXX"
  config.consumer_secret = "XXXXX"
end
# Initialise votre client Twitter
client = Twitter::Client.new(:oauth_token => "XXXXX", :oauth_token_secret => "XXXXX")
# Limite de post possible, j'ai des doutes sur ce fonctionnement
puts client.rate_limit_status.remaining_hits.to_s + " Twitter API request(s) remaining this hour"
5.times{ |t|
  if client.rate_limit_status.remaining_hits.to_i != 0 then
    # Poste
    client.update(" Test numéro " + t.to_s)
  end
}

Voilà bon twits !

- page 1 de 5