Rails: Relacionamentos belongs_to na geração do scaffold

Se você possui modelos / tabelas que possuem relacionamento e deseja criar este relacionamento na execução do scaffold, basta usar o seguinte comando:

 script/rails generate scaffold User fullname:string user_type:references ativo:boolean

Após os arquivos serem gerados, ao editar o modelo user.rb você terá o modelo abaixo: 

class User < ActiveRecord::Base
belongs_to :user_type
end

Fica a dica. 

Abraços.

 

 

Ruby on Rails + JQuery

English translation is below 

Quando comecei a utilizar Ruby on Rails uma das primeiras coisas que eu procurei saber foi como substituir o Prototype e Script.aculo.us que são as libs padrão para utilizar javascript pelo JQuery.

Decidi fazer isso não pelo fato de achar o Prototype e Script.aculo.us ruins mas, pelo fato de a muito tempo eu já utilizar o JQuery nas aplicações web que desenvolvo e com isso ter uma boa experiência com ele e também por gostar muito deste framework javascript.

O Rails possui diversos helpers que tornam o desenvolvimento com ajax muito simples, porém, todos os helpers utilizam o framework prototype em conjunto com scrip.taculo.us e aí que entra um plugin que me poupou muito trabalho pois ele já faz a integração do JQuery com os helpers do Ruby on Rails ou seja, a mudança é feita de uma maneira tão transparente que até assusta :) pois normalmente este tipo de coisa não são tão simples.

Bem, para instalar o plugin basta executar o seguinte comando de dentro do diretório da sua app rails:
script/plugin install git://github.com/aaronchi/jrails.git

A partir deste momento sua aplicação já está integrada com o JQuery e os helpers passarão a utilizar o JQuery em vez de Prototype e para componentes de UI serão utilizados os componentes do JQuery UI.

Para importar todos os arquivos JS relacionados ao JQuery e aos helpers para sua aplicação, faça isso:
<%= javascript_include_tag :defaults %>

Você pode obter maiores informações neste site.

In English 

When I started using Ruby on Rails one of the first things I wanted to know was how to replace the Prototype and Script.aculo.us libs because it is the standard for javascript and ajax to JQuery.

I decided to do this not because i think the Prototype and Script.aculo.us are poor, bad or something but because of the long time i’m already using JQuery in web applications and have a good experience with it and also really like this javascript framework.

Rails has many helpers that make developing with Ajax very simple, however, all helpers are using the prototype framework in conjunction with scrip.taculo.us by default and at this point i knew a plugin that has saved me a lot of work because he makes the integration of jQuery helpers with Ruby on Rails, the change was so clear that it really scared me :) because usually this kind of changes is not so simple.

Well, to install the plugin simply run the following command from within the directory of your rails app:
script/plugin install git://github.com/aaronchi/jrails.git

From this moment your application is already integrated with JQuery and all helpers will use JQuery instead of Prototype and UI components will use JQuery UI components.

To import all JQuery and Helpers Javascripts into your app justo do it:
<%= javascript_include_tag :defaults %>

You can get more info here.

Paginação fácil com Rails: will_paginate

English translation is below

INTRODUÇÃO

Uma coisa simples mas normalmente chata de se fazer na mão é a paginação de conteúdo, mas a maioria dos frameworks para desenvolvimento, independente da linguagem em que foi escrito conta com algum componente responsável por esta funcionalidade que apesar de simples ninguém gosta de escrever na mão do zero.

Eu já falei sobre o Zend_Paginator a bastante tempo atrás e você pode ver aqui e hoje vou falar sobre um componente que realiza o mesmo trabalho só que no framework Ruby on Rails.

will_paginate

Existem vários plugins para paginação no Rails mas daqueles que eu testei, este foi o que achei o mais simples de usar.

O código dele está disponibilizado no github e pode ser utilizado como gem, plugin ou por meio de um tarball que é disponibilizado para download.

A instalação dele é bem simples e como gem pode ser feita da seguinte forma:

gem install will_paginate

Para instalar como plugin:

script/plugin install git://github.com/mislav/will_paginate.git

Pronto! Agora vou mostrar como utilizar.
Supondo que você tenha uma model chamada User e queira paginar o conteúdo retornado da tabela Users, você invoca o método paginate informando a página atual e a quantidade de registros por página. 
Caso queira incluir condições em sua consulta, você pode fazer normalmente como se faz em qualquer consulta utilizando uma model gerada pelo rails, o código abaixo demonstra esta situação:

@users = User.paginate :page => params[:page], :per_page => 10, :conditions => ["status = :active", {:active => 'A'}]

Na view nós devemos incluir o trecho de código que monta os botões/links de paginação:

<%= will_paginate @users %>

CONSIDERAÇÕES FINAIS

Existem outros recursos deste plugin que podem ser explorados por exemplo, mudar o layout do controle de paginação porém, não irei aborda-los aqui neste post porque minha intenção é sempre ser o mais breve e simples possível. 

Para maiores informações, dê uma olhada na página deste componente no github: http://github.com/mislav/will_paginate

Abraço!!! 

In English

INTRODUCTION

A simple thing but usually boring to do by the hand is the content pagination, but in most frameworks for development, regardless of what language it was written has some component responsible for this feature that although simple one likes to write from scratch.

I’ve talked about the Zend_Paginator a long time ago as you can see (brazilian portuguese only) here, and  today and I will talk about a component that performs the same job but in the Ruby on Rails framework.

will_paginate

There are several plugins for pagination in Rails but of those I tested, this was what I found the simplest to use.

The code it is available on github and can be used as a gem, plugin or through a tarball that is available for download.

The installation is pretty simple and as gem can be made as follows:

gem install will_paginate

Plugin Installation:

script/plugin install git://github.com/mislav/will_paginate.git

Ready! Now I’ll show how to use.

Assuming you have a model called User and you want to paginate the content returned from the Users table, you invoke the method paginate informing the current page and number of records per page.
If you want to include conditions in your query, you can usually do as is done in any query using a model generated by the rails, the code below demonstrates this:

@users = User.paginate :page => params[:page], :per_page => 10, :conditions => ["status = :active", {:active => 'A'}]

In the view we need to include the code snippet that create the buttons/links pagination.

<%= will_paginate @users %>

FINAL THOUGHTS

There are other features of this plugin that can be exploited,  for example,  change the layout of the pager control but i will not address them here in this post because my intention is to always be as short and simple as possible.

For more information, check out the page of this component on github: http://github.com/mislav/will_paginate

Cheers.

Meu novo site implementado com Ruby e Ruby on Rails

Ontem eu disponibilizei meu novo site pessoal. (http://adlermedrado.com.br)

Eu estava meio cansado do outro site que já tinha quase dois anos de idade e nesse período não contou com nenhuma modificação significativa no layout e como eu estava precisando de um pet project para implementar com ruby eu resolvi re-escrever meu site utilizando o framework Ruby on Rails.

Este site foi implementado utilizando Ruby on Rails, JQuery e MySQL, a versão do Ruby é 1.8.7, do Rails é a 2.3.5, o Mysql é a versão 5 e o JQuery é a 1.3.

Eu posso dizer que a implementação com Ruby e Ruby on Rails é bem simples e ágil. Num primeiro momento a gente se perde um pouco porque a sintaxe do ruby tem suas particularidades o que num primeiro momento faz com que pessoas como eu que está acostumado com a sintaxe do PHP e Java sentir alguma dificuldade mas, após passadas algumas horas de desenvolvimento contínuo com esta linguagem eu tenho que reconhecer que ela tem uma sintaxe muito simples e elegante. Gostei muito.

Eu criei minhas próprias classes para manipular a API do Twitter e para parsear XML RSS rapidamente o que me deixou realmente impressionado com a simplicidade desta tecnologia.

Como eu não utilizo tanto conteúdo estático neste site, eu não coloquei este tipo de documento no cloud do google (Google Apps Engine) conforme meu post anterior (http://blog.adlermedrado.com.br/em-2010-e-nois-na-cloud) mas irei utilizar este conceito em uma aplicação que iniciei esta semana.

Sei que este meu site é muito pequeno e simples para servir de exemplo de uma aplicação implementada com ruby e ruby on rails mas, serviu para mim, pessoalmente, conhecer esta tecnologia e reconhecer que a produtividade com ela é impressionante. 

Estou iniciando um novo projeto com RoR e este será mais complexo e pretendo postar por aqui a minha experiência com RoR em um projeto maior.

Por favor, me dê sua opinião sobre o novo site. 

Obrigado e abraço.