04
Jul 08
 

array.collect {|item| block } → an_array
array.map {|item| block } → an_array

 

Invokes block once for each element of self. Creates a new array containing the values returned by the block. See also Enumerable#collect.

   a = [ "a", "b", "c", "d" ]
a.collect {|x| x + "!" } #=> ["a!", "b!", "c!", "d!"]
a #=> ["a", "b", "c", "d"]
Retirado de: www.ruby-doc.org/core-1.8.6/index.html

Ou seja, o método .map do Ruby invoca um bloco de comandos para cada elemento do array, sem modificar estes elementos (ele cria um novo array com os valores retornados pelo bloco). Se quiser que ele substitua os valores "antigos" pelos "novos", é só usar .map!.

 


Ahm, fiz uma coisa bem interessante hoje e sem nenhuma ajuda direta! usuhs

Bem, eu já tinha resolvido esse problema antes, com a ajuda do Bruno, mas agora eu dei uma mudada na solução. Depois tenho que saber se isso está certo..

Bem, em contribuições do ciclo de vida, eu tinha que exibir o nome do objeto. Só que a estrutura é assim:

 

Objeto has_one ciclo_vida      ciclo_vida has_many ciclo_contribuicao

ciclo_vida belongs_to objeto  ciclo_contribuicao belongs_to ciclo_vida

 

No formulário de ciclo_contribuicao, tenho que selecionar a qual ciclo de vida ele pertence. Para isso, eu preciso exibir o nome do objeto de cada ciclo_vida existente. Mas eu só posso exibir os objetos que possuem ciclo_vida. Então eu analisei o código que o bruno me ensinou, li essa descrição do .map e tentei adaptar. O código inicial era:

 

<%= f.select :ciclo_vida_id, Objeto.find(:all).map { |o| [o.titulo,o.ciclo_vida.id] }, :include_blank => true %>
 

Mas eu tinha que colocar uma condição, para apenas exibir os objetos que tinham ciclo de vida, pq desse jeito dá erro.. Alias tenho que corrigir em requisitos tb. Depois que eu pensei um pouco, resolvi definir os métodos no helper:

 

def ciclos
  CicloVida.all.map {|a| a.objeto_id }
end

# pego todos os ids dos objetos que possuem ciclo de vida.


def objetos_com_ciclo
  Objeto.find(:all, :conditions => {:id => ciclos}).map {|objeto| [objeto.titulo, objeto.ciclo_vida.id]}
end

 

E na view:

<%= f.select :ciclo_vida_id, objetos_com_ciclo, :include_blank => true %>

 

Prontoooooooo

Funciona!

Quando souber se isso tá teoricamente certo eu aviso aqui.

publicado por dessa às 21:22
sinto-me: um zumbi

Dezembro 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
18
19

20
21
22
23
24
25
26

27
28
29
30
31


posts recentes

...

subscrever feeds
pesquisar
 
Subscrever por e-mail

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

blogs SAPO