Pular para o conteúdo principal

Onde implementar um novo método ou variável?

Como sabemos, o framework  Ruby on Rails é baseado na arquitetura MVC. Desta forma, as principais pastas do projeto abaixo do nível /app são:
  • assets: onde ficam os CSS, JavaScripts e Imagens da aplicação.
  • models: onde ficam os objetos da aplicação, geralmente representam uma tabela do Banco de Dados ou um Relacionamento entre tabelas. 
    • O nome dos arquivos geralmente estão no padrão "<nome_da_tabela>.rb"
  • controllers: onde ficam as classes de controle, que permitem que os objetos (model) acessem a camada de apresentação (view). 
    • O nome dos arquivos geralmente estão no padrão "<nome_da_tabela>s_controller.rb"
    • Observe que o nome da tabela deve ser no plural.
  • views: onde ficam as páginas html da aplicação.
    • O nome dos arquivos geralmente estão no padrão "<metodo_do_controlador>".html.erb
Desta forma, o programador tem que saber onde irá criar novos métodos na aplicação, de forma que eles fiquem visíveis na camada de apresentação (View).


Quando for necessário criar um método para substituir uma coluna da tabela do Banco de Dados, onde este método poderá ser utilizado por qualquer página da aplicação, deve-se criar um método na classe do "Model", por exemplo:

#----tarefa.rb
#Custo de cada tarefa
      def custo(valor_hora)         
                return self.tempo_gasto * valor_hora
     end


Quando for necessário criar uma variável pública para ser utilizada apenas em uma página específica, esta variável deve ser criada no método específico do controlador. Geralmente esta variável é o resultado de uma consulta em várias tabelas do banco de dados:


#----projetos_controller.rb
def show
    #Tarefas do Projeto
    @versao = @projeto.versoes.find_by(projeto_id: @projeto.id) if @projeto
    @tarefas = @projeto.tarefas 


    @tarefas_da_versao = @tarefas.where(versao_id: @versao.id) if @tarefas and @versao
end




Como saber quando usar "find_by" ou "where" na consulta para uma nova variável?

  • Quando o resultado da consulta retornar apenas 1 valor, então deve-se colocar "find_by";
  • Quando o resultado da consulta retornar uma lista de objetos, então deve-se colocar "where";
Na camada de apresentação (View) estas variáveis serão usadas da seguinte forma:

 
Quando a variável retornar apenas 1 resultado, pode se usar a seguinte declaração:

#----view/projetos/show.html.erb
 <%= @versao.nome %>

Quando retornar uma lista de objetos, será necessário fazer um declaração de loop:

#----view/projetos/show.html.erb
<% if @projeto %>
    <% 
@tarefas_da_versao.each do |tarefa| %>
         <li><%= tarefa.titulo %></li>
    <% end %>

<% end %>

Quando o método for declarado no "Model", pode se usar a seguinte declaração:

 #----view/projetos/show.html.erb
<% if @projeto %>
    <%
@tarefas_da_versao.each do |tarefa| %>       
        R$ <%= tarefa.custo(50) %>   
   <% end %>
<% end %>







Comentários

Postagens mais visitadas deste blog

Brincar para Aprender!

Aprendendo a usar CSS, este joguinho é bem simples e prático. Com ele dá para aprender a usar os comandos CSS-Flex para sua aplicação. Tente colocar os sapinhos em cada posição corretamente. Acesse o site: https://codepip.com/

View - Dicas para Programadores Ruby on Rails

View - Camada de Apresentação (/*.html.erb)Como exibir uma data no formato dd/mm/aa?
Se o sistema está exibindo a data em formato mm/dd/aaaa, por exemplo:

No arquivo <suapagina>.html.erb basta adicionar o seguinte comando:

Antes:
Data Inicial: <%= @data_inicial.value.to_date %>
Data Inicial: 01/28/2017


Depois:
Data Inicial: <%= l @data_inicial.value.to_date, format:  "%d/%m/%Y" %>
Data Inicial: 28/01/2017

Como transformar um número fracionário (float, double, decimal) em inteiro? Se o sistema está exibindo um número com uma ou duas casas decimais, por exemplo:

No arquivo <suapagina>.html.erb basta adicionar o seguinte comando:

Antes 

Idade: <%= @idade %> anos
Idade: 25.0 anos

Depois

Idade: <%= @idade.to_i %> anos
Idade: 25 anos

Como formatar um conteúdo para adicionar quebras de linha no texto? Se o sistema está exibindo um texto sem quebra de linhas, mas o usuário digitou com quebra de linha, por exemplo:


No arquivo <suapagina>.html.e…