- O bloco form_for é usado para criar um formulário HTML. Dentro desse bloco você só pode usar os métodos de controle com atributos do model no qual o formulário é baseado. Se você precisa criar um formulário HTML que exibe campos arbitrários não ligados a um model, você deve usar o método form_tag.
- Filters: forma de eliminar duplicidade no código dos controllers e manter-se DRY. Ex:
class PostsController < ApplicationController before_filter :find_post, :only => [:show, :edit, :update, :destroy]
def new end
def edit end (...)
private def find_post @post = Post.find(params[:id]) end end |
- O rails executa os before_filters antes de qualquer ação no controller. Você pode usar a cláusula :only para restringir o before_filter apenas para determinadas ações ou :except para pular um before_filter em outras. Também existem after_filters, que executam depois do processamento de uma ação, bem como around filters, que envolvem o processamento de ações. Filtros também podem ser definidos em classes externas para facilitar o compartilhamento.
- Se houver relacionamento has_many e belongs_to, mapeá-lo também no arquivo routes.rb. No exemplo abaixo, comments vira um recurso aninhado dentro de posts.
map.resources :posts, :has_many => :comments
- Exemplo de controller comments, que pertencem a um post. Atenção especial para método build, em post.comments.build.
class CommentsController<ApplicationController def index @post = Post.find(params[:post_id]) @comments = @post.comments end def show @post = Post.find(params[:post_id]) @comment = @post.comments.find(params[:id]) end def new @post = Post.find(params[:post_id]) @comment = @post.comments.build end def create @post = Post.find(params[:post_id]) @comment = @post.comments.build(params[:comment]) if @comment.save redirect_to post_comment_url(@post, @comment) else render :action => 'new' end end def edit @post = Post.find(params[:post_id]) @comment = @post.comments.find(params[:id]) end def update @post = Post.find(params[:post_id]) @comment = Comment.find(params[:id]) if @comment.update_attributes(params[:comment]) redirect_to post_comment_url(@post, @comment) else render :action => 'edit' end end |
Fonte: Guias Rails