24
Abr 09

     

  • 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

publicado por dessa às 19:04

Abril 2009
Dom
Seg
Ter
Qua
Qui
Sex
Sab

1
2
3
4

5
6
7
8
9
10
11

12
13
14
15
16
17

19
20
21
22
23
25

26
27
28
29
30


pesquisar
 
Subscrever por e-mail

A subscrição é anónima e gera, no máximo, um e-mail por dia.

blogs SAPO