tag:blogger.com,1999:blog-51651385308175861472024-03-05T11:33:19.476-03:00RailsBALuciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.comBlogger19125tag:blogger.com,1999:blog-5165138530817586147.post-27974995283359076082010-05-21T11:56:00.001-03:002010-05-21T11:58:36.780-03:00XIII Semana de Informática BSI e CST Unime<div style="text-align: center;"><a href="https://sites.google.com/site/infoxiii/">https://sites.google.com/site/infoxiii/</a></div><div><br /></div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFienCU0PWDTvhuZ-omK-eOsEuw-HT0-tVivYI_izJcXoUaRPKRxsBP67RrSJ2wDlAMhHpYVLKNttPkIdjR17o0pYqWx5P45uqk-JN04eq8XFIXJHZh2nhenuPu_GyaB1WHzxy9XKJK8zs/s1600/unime.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 242px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFienCU0PWDTvhuZ-omK-eOsEuw-HT0-tVivYI_izJcXoUaRPKRxsBP67RrSJ2wDlAMhHpYVLKNttPkIdjR17o0pYqWx5P45uqk-JN04eq8XFIXJHZh2nhenuPu_GyaB1WHzxy9XKJK8zs/s400/unime.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5473737615102634034" /></a><br /><br /><div><br /></div><div><br /></div>Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com0tag:blogger.com,1999:blog-5165138530817586147.post-14256928091084952812010-01-31T22:19:00.002-03:002010-01-31T22:21:00.850-03:00Ekaaty Day 2010<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmQXk5ERbQ-f4ocmxapx71PFScAKYQxA7fUHXEW5IN-eMHBHm8y9I6FlZ0xt3QtM1UcSegHDISeNxW5gpJpZmyq5AFzZKv1E-8H8mgrP6F05zGVhdPoECKPQulreEgB7784rakL5wkomMx/s1600-h/programacaoekaatyday2010.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 272px; height: 400px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmQXk5ERbQ-f4ocmxapx71PFScAKYQxA7fUHXEW5IN-eMHBHm8y9I6FlZ0xt3QtM1UcSegHDISeNxW5gpJpZmyq5AFzZKv1E-8H8mgrP6F05zGVhdPoECKPQulreEgB7784rakL5wkomMx/s400/programacaoekaatyday2010.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5433078760747543730" /></a>Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com0tag:blogger.com,1999:blog-5165138530817586147.post-19392806296382429902009-11-22T22:00:00.002-03:002009-11-22T22:07:51.630-03:00Tela de Cadastro com Many-to-Many - correção<span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style="font-size: medium;">Pessoal, </span></span><div><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style="font-size: medium;"><br /></span></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style="font-size: medium;">O Maurício Linhares (</span></span><a target="_blank" rel="nofollow" href="http://codeshooter.wordpress.com/" style="color: rgb(85, 26, 139); "><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style="font-size: medium;">http://codeshooter.wordpress.com</span></span></a><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style="font-size: medium;">) deu uma dica para melhorar o código do post anterior, na partial <b>_form.rhtml</b> onde temos o nome do campo checkbox, devemos trocar d<b>isciplina_ids[]</b> por <b>aluno[disciplina_ids][]</b> e no controller <b>alunos_controller.rb</b> não é necessário colocar o código <b>@aluno.disciplinas = Disciplina.find(params[:disciplina_ids]) if params[:disciplina_ids]</b> nos métodos <b>create</b> e <b>update</b>.</span></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style="font-size: medium;"><br /></span></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style="font-size: medium;">Valeu Maurício pela dica!</span></span></div>Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com0tag:blogger.com,1999:blog-5165138530817586147.post-43545546724288549812009-11-20T19:22:00.021-03:002009-11-20T22:52:27.103-03:00Tela de Cadastro com Many-to-Many<div style="text-align: left;"><span class="Apple-style-span" style="font-family: arial; ">* Esse post foi baseado no tutorial de Jeffrey Hicks e no Railscast número 47.</span></div><div><div><span class="Apple-style-span" style="font-size:medium;"><span class="Apple-style-span" style="font-family:arial;"><br /></span></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-size:medium;"><span class="Apple-style-span" style="font-family:arial;">A idéia deste post é mostrar na prática como fazer um tela de cadastro havendo uma relação many-to-many. Para criar esse tutorial estou usando o Netbeans 6.7.1 e o banco de dados MySQL.</span></span></div><div><span class="Apple-style-span" style="font-size:medium;"><span class="Apple-style-span" style="font-family:arial;"><br /></span></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-size:medium;"><span class="Apple-style-span" style="font-family:arial;">Primeiro passo é criar um projeto Rails chamado <b>escola</b>.</span></span></div><div><br /></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;">Esse exemplo mostra uma parte do que seria um sistema acadêmico, onde eu tenho uma tabela de alunos, disciplinas e uma relação alunos por disciplina. Para trabalhar com o padrão do Rails seguiremos a convenção de nome para as tabelas e os campos.</span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style=" ;font-family:Georgia, serif;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdY534A7mdjZs0AlQFko2XIIurpAKCu-a-7OX8m8t9_uHdv5f8CSFxFHvPVkE-qgywhlUDJ-PbcedO8sf2TAB8K-iphZQKlwvqU3dO-h2WqEmrIgrhORFoBdunPEzZzG8j2iGijsGp1oqr/s1600/der.jpg"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdY534A7mdjZs0AlQFko2XIIurpAKCu-a-7OX8m8t9_uHdv5f8CSFxFHvPVkE-qgywhlUDJ-PbcedO8sf2TAB8K-iphZQKlwvqU3dO-h2WqEmrIgrhORFoBdunPEzZzG8j2iGijsGp1oqr/s400/der.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5406318383115613618" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 212px; " /></a></span></span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><div style="text-align: justify;"><ul><li><span class="Apple-style-span" style="font-family:arial;">Repare que o nomes das tabelas estão no plural.</span></li><li><span class="Apple-style-span" style="font-family:arial;">Os campos chaves são chamados de id.</span></li><li><span class="Apple-style-span" style="font-family:arial;">A tabela de relacionamento é na ordem alfabética.</span></li><li><span class="Apple-style-span" style="font-family:arial;">O campo de relacionamento é o nome da entidade no singular seguido de _id.</span></li></ul><span class="Apple-style-span" style="font-family:arial;">O segundo passo é gerar os scaffolds para <b>aluno</b> e <b>disciplina</b>, abaixo mostro a tela de gerar o scaffold do Netbeans 6.7.1 para o model aluno, a mesma operação deve ser feita para disciplina (lembre-se que o nome do model deve ser no singular).</span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style=" ;font-family:Georgia, serif;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAI8rJ35NP8zfPg-QWTWg8XvnjJg-CVW4X25sJV7AbsmLhpsR2lDqISv_p4ktqYMubaiCOd8jHFwGeGRXtAWk_flu-x9v9FhNI8qXOdxXarcrOw700pXW6RGxeXE7Mz86xVxyfYo-p7p1G/s1600/scaffold.jpg"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAI8rJ35NP8zfPg-QWTWg8XvnjJg-CVW4X25sJV7AbsmLhpsR2lDqISv_p4ktqYMubaiCOd8jHFwGeGRXtAWk_flu-x9v9FhNI8qXOdxXarcrOw700pXW6RGxeXE7Mz86xVxyfYo-p7p1G/s400/scaffold.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5406319994800923378" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 289px; " /></a></span></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;">Altere os models aluno.rb e disciplina adicionando o método has_and_belongs_to_many conforme imagem abaixo.</span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style=" ;font-family:Georgia, serif;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-joi7VNwFHEdgLmo4JqQZZm1u9lBnVTDFfMmQy5NCG9lENe346kdFDD3GtLJXvpW7J9rPcm_RfdTvcZ6IW5lA-s8qN4zAh79LtXZXo2hfH6GhMXoyleyV9oIPGOYs4JmaEfeaOMem1unO/s1600/models.jpg"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-joi7VNwFHEdgLmo4JqQZZm1u9lBnVTDFfMmQy5NCG9lENe346kdFDD3GtLJXvpW7J9rPcm_RfdTvcZ6IW5lA-s8qN4zAh79LtXZXo2hfH6GhMXoyleyV9oIPGOYs4JmaEfeaOMem1unO/s400/models.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5406321682898340738" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 210px; " /></a></span></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;">Essa alteração diz que disciplina tem e pertence a muitos alunos e aluno tem e pertence a muitas disciplinas. O método has_and_belongs_to_many é que faz o relacionamento n:n.</span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;">Como precisaremos de uma tabela de relacionamento, vamos criar uma migração de nome create_alunos_disciplinas para essa tabela.</span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style=" ;font-family:Georgia, serif;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR7EIp6zjtXbIslaV3QFeMLcqLKyewA9e4gL3F7ATGz_anET-JoclTxJPs5mpjO5UqKIrsKF7CtXYQrjmVTY_kOuaWMLeDCFb5eLhhxPsUvaacLa3p6Bob1smM4k_cyGc0XfHtQK1vl5Yy/s1600/migration.jpg"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR7EIp6zjtXbIslaV3QFeMLcqLKyewA9e4gL3F7ATGz_anET-JoclTxJPs5mpjO5UqKIrsKF7CtXYQrjmVTY_kOuaWMLeDCFb5eLhhxPsUvaacLa3p6Bob1smM4k_cyGc0XfHtQK1vl5Yy/s400/migration.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5406323471900153378" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 289px; " /></a><br /></span></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;">Edite o código dessa nova migration conforme imagem abaixo:</span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcUCSZ34zL21uRGiIUm8WzlPgOyZSqHWGis-D21ywvzE8EI0zC0pfFwNyW2omYTF4IanGFES3jUudakx_Ui1hjQcV8wZ_msyKaUHVP-kHFUMi6Am_fjE_6GzcIc9vuxMqc7HLKR75a0RAW/s1600/migration2.jpg"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcUCSZ34zL21uRGiIUm8WzlPgOyZSqHWGis-D21ywvzE8EI0zC0pfFwNyW2omYTF4IanGFES3jUudakx_Ui1hjQcV8wZ_msyKaUHVP-kHFUMi6Am_fjE_6GzcIc9vuxMqc7HLKR75a0RAW/s400/migration2.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5406367744500922770" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 224px; " /></a></div><div style=""><br /></div><div><span class="Apple-style-span" style="font-family:arial;">Essa tabela não terá a chave primário id. Rode as migrations.</span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;">Para permitir que o usuário informe um aluno com várias disciplinas, vamos utilizar checkbox múltiplos. O nosso formulário será gerado dinamicamente a partir das disciplinas cadastradas no banco de dados. Nossa view vai depender do controller alunos_controller para carregar as disciplinas, altere o método <b>new </b>e<b> edit </b>do controller <b>alunos_controller.rb </b>conforme imagem abaixo.</span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style=" ;font-family:Georgia, serif;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDkKWgVFsWpK7OeR4pbAmjsMsHrXN9KSPhl-bQyfeyLgpbH4y_hCKEsgEFQXRgQJja7wXex8MEzCkNoPltvivoPi2U4brPP8eCBSI5aCW8MIlzFqs9Ck1dp_OynqO_pBxGT3gapC2D4saC/s1600/alunoscontroller.jpg"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDkKWgVFsWpK7OeR4pbAmjsMsHrXN9KSPhl-bQyfeyLgpbH4y_hCKEsgEFQXRgQJja7wXex8MEzCkNoPltvivoPi2U4brPP8eCBSI5aCW8MIlzFqs9Ck1dp_OynqO_pBxGT3gapC2D4saC/s400/alunoscontroller.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5406330933206971074" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 276px; " /></a></span></span></div><div><br /></div><div><span class="Apple-style-span" style="font-family:arial;"><div>Agora iremos customizar as views edit e new de alunos. Vamos fazer isso em um único local, ou seja, na partial _form.rhtml - para isso crie dentro de views/alunos o arquivo _form.rhtml e coloque o código abaixo.</div><div><br /></div><div style="text-align: center;"><span class="Apple-style-span" style="font-family:Georgia, serif;"><br /></span></div><div style="text-align: center;"><span class="Apple-style-span" style="font-family:Georgia, serif;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinAnJjmK-r3jDxWgFknUxyYZsMeTpS8FE5k_WjbrfnU3AYSP_LUUkc9FaeTI4G_s4m2ZaasT4FmKR55hBnOXKdySI5UTA9iLrNGlzsYLz1KGSo_YPBcaoHfRwlOcGDLfTClRr8jVCCK29q/s1600/partial.jpg"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinAnJjmK-r3jDxWgFknUxyYZsMeTpS8FE5k_WjbrfnU3AYSP_LUUkc9FaeTI4G_s4m2ZaasT4FmKR55hBnOXKdySI5UTA9iLrNGlzsYLz1KGSo_YPBcaoHfRwlOcGDLfTClRr8jVCCK29q/s400/partial.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5406344772867547250" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 293px; " /></a></span></div><div>Nessa partial colocamos um for para carregar os checkbox com os valores e nomes das disciplinas disponibilizadas pelo objeto <b>@disciplinas</b> que foi passado nos métodos <b>new</b> e <b>edit</b> do controller. Repare que o botão <b>f.submit</b> tá com nome <b>button</b>, esse nome é passado como parâmetro na chamada da partial nas views new e edit e o :disable_with serve para desabilitar o botão com a mensagem "Aguarde..." enquanto a requisição estiver ocorrendo. Abaixo o código das views alteradas, veja que na chamada da partial, passamos o parâmetro <b>:button</b> com o texto que vai aparecer nos botões.</div><div><br /></div><div><span class="Apple-style-span" style=" ;font-family:Georgia, serif;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMIbH9ZBc8ZHYklSNJo-hJBs20rUVpazPj72Xki8JYISA3SR0NvBlcG99XpMjztchxHAm_XJopKGEXXQneBmxOCmIPkQKp1XsliGWo1YwiUkhNCSVKfVU1or4x1RVTjnW1zguiyyegFbCf/s1600/views.jpg"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMIbH9ZBc8ZHYklSNJo-hJBs20rUVpazPj72Xki8JYISA3SR0NvBlcG99XpMjztchxHAm_XJopKGEXXQneBmxOCmIPkQKp1XsliGWo1YwiUkhNCSVKfVU1or4x1RVTjnW1zguiyyegFbCf/s400/views.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5406343304507438754" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 198px; " /></a></span></div><div><br /></div><div><div>Vamos alterar agora a view index de alunos para poder mostrar as disciplinas que o mesmo está associado.</div><div><br /></div></div><div><br /></div><div><span class="Apple-style-span" style=" ;font-family:Georgia, serif;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnZR_Mssipe7P4GjSeCQn3xm76vFWw8hjPAi2Fuvnmg5YEEnF8px6wOZs9YWBLuz44FB-GPN0dQaKV9uZqooTwyErcV2WfymleHAhxMcuy0Bo_B0HdPivGRsa31oCra2ezYPVmPgvxf82P/s1600/index.jpg"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnZR_Mssipe7P4GjSeCQn3xm76vFWw8hjPAi2Fuvnmg5YEEnF8px6wOZs9YWBLuz44FB-GPN0dQaKV9uZqooTwyErcV2WfymleHAhxMcuy0Bo_B0HdPivGRsa31oCra2ezYPVmPgvxf82P/s400/index.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5406346336863402082" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 370px; " /></a></span></div><div><span class="Apple-style-span" style="font-family:Georgia, serif;"><br /></span></div><div>Os métodos <b>update</b> e <b>create</b> de <b>alunos_controller.rb</b> recebem requisições das views edit e new. Para armazenar o relacionamento precisamos converter disciplinas_ids para objetos Disciplina com <b>Disciplina.find(@params[:disciplina_ids]) if @params[:disciplina_ids]</b>. O if previne erros de objetos nulos quando o aluno não estiver associado a alguma disciplina.</div></span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style=" ;font-family:Georgia, serif;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyc_ZvpWBqYXaqvWIcWP-ctS4sbMG7gnoa2qPC83OmxiqsozuQFy4FP0X6_8YpZC9pBRAoz527nZ7xv6naIPBnqOWPPKIyu0llUzwnXio3TsrCGicAzhKI7cBzKfSha-zccsxsFIzWW0IJ/s1600/controller.jpg"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyc_ZvpWBqYXaqvWIcWP-ctS4sbMG7gnoa2qPC83OmxiqsozuQFy4FP0X6_8YpZC9pBRAoz527nZ7xv6naIPBnqOWPPKIyu0llUzwnXio3TsrCGicAzhKI7cBzKfSha-zccsxsFIzWW0IJ/s400/controller.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5406353018529611778" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 202px; " /></a></span></span></div><div><br /></div><div><span class="Apple-style-span" style="font-family:arial;">Agora é só testar!!!! Veja algumas telas abaixo.</span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style="font-family: Georgia, serif; "><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZLSvk1VuHPJkfnyiKhqnPF5Js586KsBOC0HEjDJGl4MbGaMannOUIOHIUhrj7A85C1xsI8BFpxyoy17swxiYnKRm56nsxRWjh0ND7wAZTZlne4K0OGJszE7gvV5tz6ID9j9CS5_IG8zEA/s1600/telas.jpg"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZLSvk1VuHPJkfnyiKhqnPF5Js586KsBOC0HEjDJGl4MbGaMannOUIOHIUhrj7A85C1xsI8BFpxyoy17swxiYnKRm56nsxRWjh0ND7wAZTZlne4K0OGJszE7gvV5tz6ID9j9CS5_IG8zEA/s400/telas.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5406368771644323538" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 247px; " /></a></span></span></div></div></div>Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com0tag:blogger.com,1999:blog-5165138530817586147.post-40322918951085413672009-11-12T19:36:00.004-03:002009-11-12T19:47:29.899-03:00Formulário Simples de Pesquisa<div style="text-align: left;">A idéia desse post é permitir filtrar o grid de Locadoras que está na página index.</div><div><br /></div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoX_2tRgbwugsIk_QBKwSs8SN1Gjvw11XaPSpjFWxtfHgqQQDA_Uezb1v85YIxSYs6lHw7z30uI1a53CjtGizUWS4GIoXwyoxrExX4jCkquJEqfDvUxFFpgT3qPbeaBEt1I5z-mILar6dB/s1600-h/filtro01.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 112px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoX_2tRgbwugsIk_QBKwSs8SN1Gjvw11XaPSpjFWxtfHgqQQDA_Uezb1v85YIxSYs6lHw7z30uI1a53CjtGizUWS4GIoXwyoxrExX4jCkquJEqfDvUxFFpgT3qPbeaBEt1I5z-mILar6dB/s400/filtro01.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5403349923589912370" /></a><p class="MsoNormal">Sabemos que a página inicial é a página index.html.erb do controller Locadoras, abra o arquivo e adicione o trecho de código destacado.</p><p class="MsoNormal"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf1PnKLwYcMxxjQautGAdrFJtS0fJBVFhPvf-cqVFCBkOq7rudgCuv3X77yJDiuBZBucTfvYpvl-krXLxdiDNsixmMua58_-Rg37cG7FLUvHsBgKrRbA519_LUCggaTn3P6mR1pCvKx4Sc/s1600-h/filtro02.jpg"><br /><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf1PnKLwYcMxxjQautGAdrFJtS0fJBVFhPvf-cqVFCBkOq7rudgCuv3X77yJDiuBZBucTfvYpvl-krXLxdiDNsixmMua58_-Rg37cG7FLUvHsBgKrRbA519_LUCggaTn3P6mR1pCvKx4Sc/s400/filtro02.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5403350706064556690" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 182px; " /></a></p><p class="MsoNormal"></p><p class="MsoNormal" style="text-align:justify">O helper form_tag inicia uma tag form que aponta a ação para uma url configurada com locadoras_path e método get. De acordo com métodos padrões REST, locadoras_path será substituida por /locadoras, ou seja, com o verbo get e o path /locadoras, a ação a ser executada será a index - trocando em miúdos, carregará a própria página.</p> <p class="MsoNormal" style="text-align:justify">O helper text_field_tag cria um campo texto padrão, onde o primeiro parâmetro é o nome do campo e o segundo é o value - trocando em miúdos, um campo com nome :search e o valor será o próprio valor digitado quando o formulário for submetido.</p> <p class="MsoNormal" style="text-align:justify">O helper submit_tag cria um botão submit padrão, onde o primeiro parâmetro é o texto que aparecerá no botão, o segundo parâmetro é um hash, que nesse caso, estamos dizendo que o botão não tem campo nome, para que não seja passado pela url. </p> <p class="MsoNormal" style="text-align:justify">Como estamos chamando o método index, vamos alterá-lo no controller de locadoras.</p><p class="MsoNormal" style="text-align:justify"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA2AnuDo-MfATFJ8jJqXs94EdYMA-iWadyxYVGL60so9Q8WxBs0ZIvYCrMFrb9FcMCcTOkGtsBZxyTEEExby5q_BAsRHKFTEThx_NcEH-HEKe-9oskA6OJgJ_P1ebvxIKMGgipYd-PfkXe/s1600-h/filtro03.jpg"><br /><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA2AnuDo-MfATFJ8jJqXs94EdYMA-iWadyxYVGL60so9Q8WxBs0ZIvYCrMFrb9FcMCcTOkGtsBZxyTEEExby5q_BAsRHKFTEThx_NcEH-HEKe-9oskA6OJgJ_P1ebvxIKMGgipYd-PfkXe/s400/filtro03.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5403350709564870482" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 233px; " /></a></p><p class="MsoNormal" style="text-align:justify"></p><p class="MsoNormal" style="text-align:justify">Reparem que agora o método índex retorna @locadoras, que ao invés de ter ser resultado do método all (Locadoras.all), é resultado do método search, e de onde vem esse método search? Vem do model locadora, conforme abaixo:</p><p class="MsoNormal" style="text-align:justify"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN5YaGNOD4ze-sCdJKhuiggrsLdBPJaYKSUKhPAIX87tQAasld5ycwS1MZzJqVPKoVco4ykDR16NVzHXoStseh1U5rFmtA_zAZxYvbXSNY88PCFaTFp4t_5ORYPxsZQWaYHcxZ1lZLHc0X/s1600-h/filtro04.jpg"><br /><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN5YaGNOD4ze-sCdJKhuiggrsLdBPJaYKSUKhPAIX87tQAasld5ycwS1MZzJqVPKoVco4ykDR16NVzHXoStseh1U5rFmtA_zAZxYvbXSNY88PCFaTFp4t_5ORYPxsZQWaYHcxZ1lZLHc0X/s400/filtro04.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5403350708218427314" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 173px; " /></a></p><p class="MsoNormal" style="text-align:justify"><br /></p><p class="MsoNormal" style="text-align:justify">Criamos o método search que recebe um parâmetro, verificamos se p existe, em caso afirmativo, chamamos o método find, onde o mesmo retornará todos os registros que atendam à condição passada, caso contrário, retorna todos os registros.</p><p></p><p></p><p class="MsoNormal">Este post foi baseado pelo vídeo abaixo:</p><p class="MsoNormal"><a href="http://media.railscasts.com/videos/037_simple_search_form.mov">http://media.railscasts.com/videos/037_simple_search_form.mov</a></p><p class="MsoNormal"><br /></p>Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com2tag:blogger.com,1999:blog-5165138530817586147.post-85024409312187081152009-10-22T22:51:00.002-03:002009-10-22T22:55:29.527-03:00LinguÁgil 2009<img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 240px; height: 81px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjC2czn8MdmNdtyO4ZBRGAGH-4X6VsVTJtFdFQW8G4imGB3l4D8flXAFW43BKeLNu9V6TOD2aZ9-shoI3uCyVAihdAz5Nsr-BUDajaHro_sjyz4HeSz6-HBQf4ntou0QHG76Lbi7AZqNAmu/s400/linguagil.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5395608022669586786" /><div style="text-align: left;"><span class="Apple-style-span" style="font-family:Arial, Verdana, sans-serif;font-size:100%;color:#444444;"><span class="Apple-style-span" style=" line-height: 20px;font-size:13px;"><br /></span></span></div><div style="text-align: justify;"><span class="Apple-style-span" style=" color: rgb(68, 68, 68); line-height: 20px; font-family:Arial, Verdana, sans-serif;"><span class="Apple-style-span" style="font-size: medium;">A proliferação de tecnologias para o desenvolvimento de aplicações web vem gerando exaustivas discussões sobre qual adota-las em seus projetos. Java, PHP e Ruby estão entre as 10 linguagens de programação mais utilizadas no mundo, segundo a </span><a href="http://www.tiobe.com/tiobe_index/index.htm" rel="nofollow" style="color: rgb(0, 51, 204); text-decoration: underline; "><span class="Apple-style-span" style="font-size: medium;">TIOBE Programming Community</span></a><span class="Apple-style-span" style="font-size: medium;">. Em paralelo, os mesmos profissionais buscam melhorar seus serviços adotando metodologias que ao mesmo tempo permitam o controle de seus projetos, gerem valor agregado aos clientes e evitem excesso de burocracia.</span></span></div><span class="Apple-style-span" style=" color: rgb(68, 68, 68); line-height: 20px; font-family:Arial, Verdana, sans-serif;font-size:13px;"><span class="Apple-style-span" style="font-size: medium;"><br /></span><div style="text-align: justify;"><span class="Apple-style-span" style="font-size: medium;">Diante desse cenário, os grupos </span><a href="http://br.groups.yahoo.com/group/agile-bahia" rel="nofollow" style="color: rgb(0, 51, 204); text-decoration: underline; "><span class="Apple-style-span" style="font-size: medium;">AgileBahia</span></a><span class="Apple-style-span" style="font-size: medium;">, </span><a href="http://javabahia.blogspot.com/" style="color: rgb(0, 51, 204); text-decoration: underline; "><span class="Apple-style-span" style="font-size: medium;">JavaBahia</span></a><span class="Apple-style-span" style="font-size: medium;">, </span><a href="http://groups.google.com.br/group/phpba" style="color: rgb(0, 51, 204); text-decoration: underline; "><span class="Apple-style-span" style="font-size: medium;">PHPBahia</span></a><span class="Apple-style-span" style="font-size: medium;"> e </span><a href="http://bahiaonrails.blogspot.com/" style="color: rgb(0, 51, 204); text-decoration: underline; "><span class="Apple-style-span" style="font-size: medium;">RailsBahia</span></a><span class="Apple-style-span" style="font-size: medium;"> realizarão em Salvador a edição 2009 do</span><b><span class="Apple-style-span" style="font-size: medium;">LinguÁgil - Misturando </span></b><b><span class="Apple-style-span" style="font-size: medium;">Linguagens e Agilidade</span></b><span class="Apple-style-span" style="font-size: medium;">. Inédito na Bahia, o evento reune algumas das principais comunidades de TI, buscando estimular aprendizado e discussões em torno de linguagens de programação e metodologias ágeis.</span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-size: medium;">Visitem o site: </span><a href="http://www.linguagil.com.br/"><b><span class="Apple-style-span" style="font-size: medium;">http://www.linguagil.com.br/</span></b></a></div></span>Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com1tag:blogger.com,1999:blog-5165138530817586147.post-76032901928798668362009-10-21T20:26:00.009-03:002009-10-22T14:40:44.016-03:00Formulário com Combo<div style="text-align: justify;"><span class="Apple-style-span" style="font-family: verdana; ">Dando continuidade nas aulas, vou mudar um pouco, ao invés de PowerPoint colocarei um post tradicional. A idéia desse post é mostrar como ajustar uma tela gerada pelo scaffold adicionando uma combobox.</span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:verdana;"><br /></span></div><div style="text-align: justify;"><span class="Apple-style-span" style=" color: rgb(255, 102, 102); font-family:verdana;">Obs: O exemplo aqui serve somente para ensinar o uso de combobox, não se trata da regra de negócio que pretendo aplicar, pois na tela de cadastro de memo vocês verão a combo de usuário, mas na realidade, o usuário vai ser pego da sessão.</span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:verdana;"><br /></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:verdana;">Primeiro passo então é gerar o scaffold para memo (visto em aulas passadas).</span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:verdana;"><br /></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:verdana;">Sabemos que um usuário pode ter zero ou mais memos e um memo só pode ter um usuário, então temos uma relação zero para muitos. Para refletir essa relação, altere os models User e Memo conforme imagem abaixo.</span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:verdana;"><br /></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:verdana;"><br /></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:verdana;"><span class="Apple-style-span" style=" ;font-family:Georgia, serif;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinjVL2hfWnj9VsIs5VoHjl_QaZFtSuvj4dWRKn8klP2d_Jub3heuAzX9TPj-2D12-VidPgWUHiTUPRh2aH3fBXaMFvk-qhWZM4ASRI7H8OoHkMDceDotKY6of58sqvXYAZSNo2tIRY6bK1/s1600-h/img01.jpg"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinjVL2hfWnj9VsIs5VoHjl_QaZFtSuvj4dWRKn8klP2d_Jub3heuAzX9TPj-2D12-VidPgWUHiTUPRh2aH3fBXaMFvk-qhWZM4ASRI7H8OoHkMDceDotKY6of58sqvXYAZSNo2tIRY6bK1/s400/img01.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5395202429298397090" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 243px; " /></a></span></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:verdana;"><br /></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:verdana;"><div style="text-align: justify;">Como memo se relaciona com usuário, sua tela de cadastro (<span class="Apple-style-span" style="color:#FF6666;">view new</span>) deve ter uma combo com os usuários disponíveis para seleção.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span class="Apple-style-span" style=" ;font-family:Georgia, serif;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9tQ1Izv6gvEvyHOPRyU9nrwhR4S0NvsDwOP_Nwt0cSqodjtve3-Lf7Zj8P0X7FjlSfBqisfYewNITgzKGL2ZKDVHG9Jte9smJd_d0D5tl68OBvRZkMTeBgUGkVMe_IgxcEzEJch2uLRUB/s1600-h/img02.jpg" style="text-decoration: none;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9tQ1Izv6gvEvyHOPRyU9nrwhR4S0NvsDwOP_Nwt0cSqodjtve3-Lf7Zj8P0X7FjlSfBqisfYewNITgzKGL2ZKDVHG9Jte9smJd_d0D5tl68OBvRZkMTeBgUGkVMe_IgxcEzEJch2uLRUB/s400/img02.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5395203146549794994" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 268px; " /></a></span></div><div>Agora abra o código fonte da view new do controller memo, no meu caso (c:\agenda\app\views\memos\new.html.erb). Veja que onde tem <span class="Apple-style-span" style="color:#FF6666;"></span> trocamos por <span class="Apple-style-span" style="color:#FF6666;"></span><span class="Apple-style-span" style="color:#FF6666;"></span>.</div><div><br /></div><div><span class="Apple-style-span" style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8YPah_r5h3RVccSubBu7LQ18nxf4HwUfNKyHj-VqCqpSMU9F6sGrtgjOdhddyLJ3oxTfQAsUdlcDV12JaL9ZEg7JAbyh59fw-C2UTmmbBLoPVhXTj9JcLogWiVeXaL-BFjXLYB8Y2Dg7f/s400/img03.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5395205274285229090" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 198px; " /></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:Georgia, serif;color:#0000EE;"><br /></span></div><div style="text-align: justify;"><div style="text-align: justify;">O método helper<span class="Apple-style-span" style="color:#FF6666;"> </span>f.select é o responsável em criar uma caixa de seleção e recebe os parâmetros:</div><div style="text-align: justify;">:user_id – é o nome do campo na tabela memo</div><div style="text-align: justify;">@users – hash que é retornado pelo controller *veremos abaixo</div><div style="text-align: justify;">:prompt=>”texto” – texto que aparece na combo</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Agora abra o memos_controller.rb e adicione um filtro que chama o método loadUsers antes dos métodos new, edit, create e update. Altere também o método index colocando o include no Memo.all, isso fará que o método carregue somente uma vez os usuários.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:Georgia, serif;color:#0000EE;"><br /></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:Georgia, serif;color:#0000EE;"><span class="Apple-style-span" style="color: rgb(0, 0, 0); "><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ9zgABb0tboHrzbAWxPHBnmCCi1wdn6DXvrmACMgHSITHpJHg59_w2jhY74csQMga8iNePHUjdhfLsjCxLsbBMHQ1SNtGZsib7w45YN-1HzYJwG2vh7W7tph0vAtJaEMLVNi8crG-YTAx/s1600-h/img04.jpg"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ9zgABb0tboHrzbAWxPHBnmCCi1wdn6DXvrmACMgHSITHpJHg59_w2jhY74csQMga8iNePHUjdhfLsjCxLsbBMHQ1SNtGZsib7w45YN-1HzYJwG2vh7W7tph0vAtJaEMLVNi8crG-YTAx/s400/img04.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5395480321907216546" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 169px; " /></a></span></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:Georgia, serif;color:#0000EE;"><br /></span></div><div style="text-align: justify;">Adicione antes do último end o código do método loadUsers que retorna o objeto @users (lembra-se que usamos ele na view new para preencher a combo) que é uma hash de usuários. Cada objeto só tem os atributos login e id.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span class="Apple-style-span" style="color:#FF6666;">O método collect retorna um hash de todos os objetos retornados no método all.</span></div><div><br /></div><div><span class="Apple-style-span" style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4QSbbelOARLZfetd8YPAJh0D973kp8L6dk9OuDss18JzbL4OG8B6nfALR4KtPoj0R0a-ouJXm-0nxtd3lWzqBRO5oDCHsESAFUZWrW-LgFmt5W-Z4r-NSPghUJCZnadZphct_q7X2P1Ll/s400/img05.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5395207082600469058" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 92px; " /></span></div><div style="text-align: justify;">Ao submeter a página, sabemos que o sistema redirecionará para a view show (c:\agenda\app\views\memos\show.html.erb) , e nela devemos mostrar o nome do usuário, então basta ajustar o código conforme imagem abaixo. Repare que só alteramos a linha 7, onde tinha <span class="Apple-style-span" style="color:#FF6666;">@memo.user</span> colocamos <span class="Apple-style-span" style="color:#FF6666;">@memo.user.login</span>.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span class="Apple-style-span" style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5YJ6Yw6twe0WODcquzNx27kn4dFaBvKQngmQxEmI8bvAqHgqhGA82Xq9I0mBWsyVLk6lyd7CyW6-2DkaZzVRnMMD_X_7Kkk4wXS8pQk_untvj_LN7vOxPIn4ICmpQXTeKklWYtJR0lQ54/s400/img06.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5395208581091801330" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 193px; " /></span></div><div style="text-align: justify;"><span class="Apple-style-span" style="font-family:Georgia, serif;color:#0000EE;"><span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family:verdana;"><div style="text-align: justify; ">Analogamente, você pode alterar a view index para que mostre também o nome do usuário na listagem que aparece.</div></span></span></div></div></span></div>Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com0tag:blogger.com,1999:blog-5165138530817586147.post-11983884697351860702009-09-30T15:18:00.001-03:002009-09-30T15:20:14.491-03:00Autenticação no Rails<iframe src="http://docs.google.com/present/embed?id=dgd4jfgj_497fv89wkdt" frameborder="0" width="410" height="342"></iframe><br /><br />Para baixar os fontes clique <a href="http://www.4shared.com/file/136573015/b7e8a109/sistema.html" target=_blank>aqui.</a>Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com0tag:blogger.com,1999:blog-5165138530817586147.post-64883820684771962092009-09-13T00:21:00.003-03:002009-09-13T00:25:19.061-03:00Livro: Use a Cabeça! Rails<div style="text-align: justify;">A AltaBooks disponibiliza o primeiro capítulo do livro Use a Cabeça! Rails, acesso link <a href="http://altabooks.tempsite.ws/capitulos_amostra/UC%20rails.pdf">http://altabooks.tempsite.ws/capitulos_amostra/UC%20rails.pdf</a> e divirta-se!<br /></div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3_94c3t1wmBhO1OlB_Jwm8EiaUFeg2E0SEJ6uu918Ra8ptfdBmxjzJtMcYhs7Ewm7N5jjgetkSgg1v7joL9YETw6xS-8srSdJLz82k4OgHqCm6cBndIzIcwLyDA_fjQ7Q6bR4zd3MY-PW/s1600-h/useacabecarails.gif"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 122px; height: 165px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3_94c3t1wmBhO1OlB_Jwm8EiaUFeg2E0SEJ6uu918Ra8ptfdBmxjzJtMcYhs7Ewm7N5jjgetkSgg1v7joL9YETw6xS-8srSdJLz82k4OgHqCm6cBndIzIcwLyDA_fjQ7Q6bR4zd3MY-PW/s400/useacabecarails.gif" alt="" id="BLOGGER_PHOTO_ID_5380787742645486594" border="0" /></a>Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com0tag:blogger.com,1999:blog-5165138530817586147.post-78541459970986201852009-09-11T00:01:00.002-03:002009-09-12T22:41:56.813-03:00Introdução ao Rails<iframe src="http://docs.google.com/present/embed?id=dgd4jfgj_430fcgbdndg" frameborder="0" width="410" height="342"></iframe>Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com1tag:blogger.com,1999:blog-5165138530817586147.post-16238553080147902602009-09-06T20:43:00.002-03:002009-09-06T20:46:17.006-03:00Introdução ao Ruby<iframe src="http://docs.google.com/present/embed?id=dgd4jfgj_357d4srdz7h" frameborder="0" width="410" height="342"></iframe><br /><br />Slides da aula de Introdução ao Ruby da disciplina Desenvolvimento Web com Banco de Dados da Faculdade Hélio Rocha.Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com2tag:blogger.com,1999:blog-5165138530817586147.post-6430208991904214202009-07-24T10:08:00.003-03:002009-07-24T10:11:51.730-03:00Cursó Ágil na Prática<div style="text-align: justify;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.indexti.com/preinscricao.php"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 394px; height: 104px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKKgYuTGZPolRn5tFoCDzhs-gt8AwOw1lsiABtOOk5II0A8F_Zpo7nUoZpLK0jsqwxqP5Nw49NnVv_Dqve9rXLYwk8F1VsysLxfRBlL-okF28CIRMvUKWKz5dyz_IDKFwMJNZ_v2FVC1f9/s400/banner.png" alt="" id="BLOGGER_PHOTO_ID_5362012902605312930" border="0" /></a><br />A Index TI, empresa especializada em metodologias ágeis, oferece o curso “Ágil na Prática”, composto por aulas presenciais teóricas e práticas, demonstrando a aplicabilidade das metodologias de gerenciamento e desenvolvimento ágil Scrum e XP (Extreme Programming) utilizando o framework Ruby on Rails.<br /><br />Maiores informações clique <a href="http://www.indexti.com/preinscricao.php">aqui</a>.<br /></div>Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com0tag:blogger.com,1999:blog-5165138530817586147.post-65636315890579882582009-04-12T00:10:00.000-03:002009-04-12T00:11:27.603-03:00Curso de Ruby on Rails - parte 5<iframe src='http://docs.google.com/EmbedSlideshow?docid=dgd4jfgj_2642rz86pgq' frameborder='0' width='410' height='342'></iframe>Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com0tag:blogger.com,1999:blog-5165138530817586147.post-80846363842193677552009-03-20T21:32:00.001-03:002009-03-20T21:34:38.046-03:00Maré de AgilidadeEntre os dias 26.03 e 31.03 ocorrerá em Salvador a 2ª Edição do Evento Maré de Agilidade. <br /><br />http://www.maredeagilidade.com.br/Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com0tag:blogger.com,1999:blog-5165138530817586147.post-89888673163069850072009-03-10T16:44:00.000-03:002009-03-10T16:45:10.072-03:00Curso de Ruby on Rails - parte 4<iframe src='http://docs.google.com/EmbedSlideshow?docid=dgd4jfgj_227cj592bfb' frameborder='0' width='410' height='342'></iframe>Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com1tag:blogger.com,1999:blog-5165138530817586147.post-86920521645975198382009-02-23T01:17:00.000-03:002009-02-23T01:18:03.327-03:00Curso de Ruby on Rails - parte 3<iframe src='http://docs.google.com/EmbedSlideshow?docid=dgd4jfgj_200d55dmm6x' frameborder='0' width='410' height='342'></iframe>Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com0tag:blogger.com,1999:blog-5165138530817586147.post-9342511353427497282009-02-15T17:54:00.000-03:002009-02-15T17:57:58.189-03:00Curso de Ruby on Rails - parte 2<iframe src='http://docs.google.com/EmbedSlideshow?docid=dgd4jfgj_179gzpwbv6n' frameborder='0' width='410' height='342'></iframe>Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com0tag:blogger.com,1999:blog-5165138530817586147.post-32030405114603052082009-02-15T17:53:00.000-03:002009-02-15T17:56:33.434-03:00Curso de Ruby on Rails - parte 1<iframe src='http://docs.google.com/EmbedSlideshow?docid=dgd4jfgj_137dps3s6g6' frameborder='0' width='410' height='342'></iframe>Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com1tag:blogger.com,1999:blog-5165138530817586147.post-68271602015119273172009-02-15T17:45:00.000-03:002009-02-15T17:54:52.257-03:00Boas vindas!<div style="text-align: justify;">Caros leitores,<br /><br />Eu tenho um costume de fazer slides de tudo que eu esteja estudando. Como decidi estudar o Ruby On Rails esse ano, venho através desse blog disponibilizar esses slides.<br /><br />Caso eu tenha feito alguma referência a algum material e não tenha colocado, favor me enviem um e-mail para que possa fazer as devidas correções.<br /><br />Todo os slides que colocarei aqui podem ser distribuídos e modificados conforme necessidade de cada um, só peço que assim como eu cito as referências citem meu nome ou pelo menos o meu blog.<br /><br />Sejam bem vindos e qualquer ajuda, dica, indicação serão bem vindos.</div>Luciano Borgeshttp://www.blogger.com/profile/14731628279494264615noreply@blogger.com0