Posts Tagged ‘return’

Ruby como verificar se uma variável existe similar ao isset do PHP

Postado em 17 jun 2009
Categoria(s) Ruby

No PHP existe a função isset ela é muito interessante para testar se uma variável existe, ela retorna true caso exista e false caso contrário.

Por exemplo:

1
2
3
4
5
6
7
8
public function cleanAttributes($params)
{
  if (isset($params['title'])) {
    $params['title'] = strip_tags($params['title']);
  }
 
  return $params;
}

No Ruby você pode fazer o mesmo usando o operador defined?.

Por exemplo:

1
2
3
4
5
6
7
8
9
def clean_attributes(params)
  if defined?(params['title'])
    if !params['title'].nil?
      params['title'] = params['title'].strip_tags
    end
  end
 
  return params
end

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark

Helper para criar breadcrumb em Ruby on Rails

Postado em 14 jan 2009
Categoria(s) Ruby on Rails

Estou desenvolvendo uma aplicação em rails, hoje surgiu a necessidade de criar a navegação por breadcrumb. Fui atrás para ver o que já existia em Rails, infelizmente encontrei algumas coisas complexas e estourando o escopo da minha minha necessidade. Na verdade o que eu precisava era criar links e algumas vezes somente aparecer o texto sem link no breadcrumb.

Em vez de perder um tempão na internet fuçando, decidi fazer um helper para gerar o breadcrumb conforme a minha necessidade.

Fiz o seguinte, no application_helper.rb criei o método breadcrumb:

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
# Methods added to this helper will be available to all templates in the application.
module ApplicationHelper
 
  def breadcrumb(array)
    output = '
<div class="breadcrumb">'
    size = array.size - 1
    array.each {
      |e| e.each {
        |key, value|
 
        if value.empty?
          output += key
        else
          output += link_to(key, value)
        end
 
        output += " > " if size > 0
      }
 
      size -= 1
    }
    output += '</div>
'
 
    return output
  end
end

No meu template eu chamo o helper breadcrumb passando um array e em cada posição do array um hash separado pela chave e valor, onde a chave é o texto e o valor é o link. Caso no valor eu passe uma string vazia ”, apenas é colocado o texto no breadcrumb.

Exemplo no template show.rhtml:

1
<%= breadcrumb([{ 'Home' => home_url }, { 'Notícias' => url_for(:controller => :histories) }, { @history.title => '' }]) %>

Que vai gerar o seguinte html:

1
<a href="http://localhost:3000/">Home</a> > <a href="/histories">Notícias</a> > Governo Federal qualifica a gestão da área de Tecnologia da Informação

Outro exemplo mais simples:

1
2
3
<%= breadcrumb([{ 'Home' => 'http://patrickespake.wordpress.com' }, { 'Tags' => 'http://patrickespake.wordpress.com/tags') }, { 'Ruby on Rails' => '' }]) %>
 
<%= breadcrumb([{ 'Home' => 'http://patrickespake.wordpress.com' }, { 'Tags' => 'http://patrickespake.wordpress.com/tags') }]) %>

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark

symfony usar o object_select_tag para retornar os valores ordenados

Postado em 02 dez 2008
Categoria(s) Symfony

Esses tempos estava usando o object_select_tag (é uma mão na roda), mas precisava trazer os resultados em ordem crescente. Foi ae que eu descobri que existe uma opção peer_method onde é possível definir o método no model para retornar a lista de resultados.

Eu não curto o Propel, prefiro bem mais o Doctrine. Desta forma esse exemplo é baseado usando o Doctrine:

No template:

1
2
3
4
5
6
7
<?php echo object_select_tag(isset($filters['Status']) ? $filters['Status'] : null, null, array (
  'include_blank' => true,
  'related_class' => 'Status',
  'text_method' => '__toString',
  'control_name' => 'filters[Status]',
  'peer_method' => 'getSorted'
)) ?>

No model StatusTable.class.php:

1
2
3
4
5
6
7
public static function getSorted()
{
  $q = new Doctrine_Query();
  $q->from('Status')->orderBy('name ASC');
 
  return $q->execute();
}

No código acima que é possível definir a forma de ordenação e qual coluna que deve ser usada para ordenar.

Agora falta criar o método __toString no model Status.class.php:

1
2
3
4
public function __toString()
{
  return $this->name;
}

O método __toString e usado para imprimir os valores no combo box.

Pronto! ;-)

  • Share/Bookmark