JavaFree.org | RubyOnBr.org

criando varios models com um form!

Acompanhar criando varios models com um form! 8 posts, 8 participantes

Avatar Daniel Gatis 145 posts

Algum tempo passei por algumas dificudades de como implementar um mestre-detalhe com rails!—opa! o que é um mestre-detalhe?!

Mestre detalhe é quando temos uma entidade “forte” que tem entidades “fracas” que não tem sentido existir sozinhas.

Então uma maneira de resolver isso é quando salvar a entidade “forte” salvar as entidades “fracas” tambem.

let’s go!

Temos o seguinte cenario: tenho um cadastro de “Bar” e nele temos que cadastrar as “Cervejas” que são vendidas nesse bar.

bar_controller.rb bar/novo.rhtml

legal! mas isso ainda ta muito “estatico” quero a liberdade para inserir quantas cervejas eu quizer. Uma boa solução é adicionar as cervejas dinamicamente com um rjs. Vamos refatorar!

bar/novo.rhtml bar/_cerveja_fields.rhtml

blz… de sobra ainda criamos um DIV com id unico baseado no index para cada cerveja! Agora só ta faltando um link para inserirmos mais cervejas para nosso bar.

bar/novo.rhtml

Vamos usar ajax para adicionar as cervejas. Vamos criar no controller um metodo para responder a nossa requisição ajax.

bar_controller.rb bar/nova_cerveja.rjs

Pronto agora temos um rjs que adiciona dinamicamente as cervejas! mas perai… FUCK! o partial “cerveja_fields” precisa de um index para gerar os DIV para cada cerveja… e agora?!

Uma boa saida para esse probelma é quando fizer a requisição para uma “nova_cerveja” mandar a quantidade de cerveja que já existe e incrementar.

bar/novo.rhtml bar/nova_cerveja.rjs

blz! mas ainda temos um problema nosso link de para adicionar uma nova cerveja esta estatico com o tamanho sempre fixo. Vamos arrumar isso…

bar/novo.rhtml bar/_nova_cerveja_link.rhtml bar/nova_cerveja.rjs

Agora quando adicionamos uma nova cerveja atualizamos o DIV do link. Só esta faltando o link para remover uma cerveja.

bar/_cerveja_fields.rhtml remover_cerveja.rjs

A baixo temos o codigo completo:

bar_controller.rb bar/novo.rhtml bar/_cerveja_fields.rhtml bar/_nova_cerveja_link.rhtml bar/nova_cerveja.rjs bar/remover_cerveja.rjs

=*

 
Avatar_h Shairon Toledo 1148 posts

Isso é um artigo.

 
Avatar Ronie Uliana 887 posts

E muito bom, por sinal!

 
Avatar CleitOnRails 23 posts

Parabéns pelo ‘Artigo’.

Eu ia deixar este post passar sem comentar, porém, percebo o quanto é importante reconhecer um ótimo trabalho quando ele é voluntariamente bem feito.

Mais uma vez parabéns.

 
Avatar Davis Zanett... 128 posts

Baita pinguço ;) Traz uma pra mim garçom!

Parabens ae pelo artigo! ;)

 
229486 Clovis 714 posts

Existe um controller EDIT para este codigo???

 
Avatar Tiago Pereira 2 posts

Ainda estou aprendendo sobre o Rails. Estou com um problema. Eu tenho uma view que mostra uma tabela com dados tirados do banco de dados. Uma coluna se chama ‘status’ que tem 3 possibilidades para a ocorrência: ABERTA, EM ANDAMENTO, FECHADA, havendo uma tabela em BD apenas para cuidar disso, tendo cada ‘status’ um ID. Para o ‘status’ ABERTA há um link que direciona para outra página. Quando o link é ‘acionado’, preciso mudar o ‘status’ de ABERTA para EM ANDAMENTO. É uma espécie de atualização da página.

Alguém sabe me dizer como fazer isso? Com o ‘link_to’ ele apenas direciona, e não altera, sendo que coloquei os comandos no ‘controller’ para alterar o ID corrente. Tentei usar ‘link_to_remote’, mas não direciona a página e nem altera. Qualquer ajuda é bem vinda…

 
Avatar Fernando Luizao 97 posts

Utilize a opção :update do link_to_remote e coloque o status em um div. Exemplo de uso:

link_to_remote("Mudar status", :update => "id do div com o status escrito",
    :url => { :action => "sua action" })

Se vc tiver um div assim:

<div id="status">ABERTO</div>

e colocar um link_to_remote assim:

link_to_remote("Mudar status", :update => "status",
    :url => { :action => "muda_status" })

Basta a sua action muda status rendenizar algum texto que o conteúdo do div status será atualizado. Exemplo:

def muda_status
  render :text => "EM ANDAMENTO" 
end

Mais informacoes:

http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html