terça-feira, 11 de maio de 2010

Configurando contexto(Routes and namespace)

Bem, hoje enfrentei mais um problema na minha saga, aprendendo a trabalhar com o ruby, como estou criando uma página de administração eu queria agrupar todo o conteúdo que virá será manipulado pelo administrado numa pasta chamada admin.
Até aí super tranquilo, como todo bom brasileiro não li a documentação inteira, vamos aos meus problemas. Primeiro queria gerar um CRUD(Create, Retrieve, Update e Delete) dentro da pasta, então para criar um usamos um scaffold, então criei digitei:

script/generate scaffold Admin/Menu name:string description:string

Milagrosamente a pasta admin foi criada e as coisas separadas, algo bem parecidos como criado um package no java ou namespace no C#(linguagens que sou mais familiarizado).

Pensei comigo mesmo, claro essa foi simples até de mais, só que ai feliz da vida fui rodar o site e ERRO, ele afirmava que a variavel @menu estava nula, achei estranho mas coloquei um if lá para verificar se o menu era nil.

Quando cliquei em new menu, que ele chamaria a página new, ele me joga uma dessa:

uninitialized constant MenusController

e um stack meio inutil.

C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:443:in `load_missing_constant'
C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:80:in `const_missing'
C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:92:in `const_missing'
C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/inflector.rb:361:in `constantize'
C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/inflector.rb:360:in `each'
C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/inflector.rb:360:in `constantize'
C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/string/inflections.rb:162:in `constantize'
C:/Ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/routing/route_set.rb:443:in `recognize'
C:/Ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/routing/route_set.rb:436:in `call'

Pensei com meus botões, deve ser problema na configuração de routes, já que ele não encontrou o controller, e pensei logo e scaffold não gera essa parte corretamente, então como fazer?

Depois de algumas tentativas e muitos erros, e documentação digerida(não lida obviamente), chego a conclusão que resolve o problema, o uso de:

map.namespace(:admin) do |admin|
admin.resources :menus
end

Onde eu digo que dentro da pasta admin, será encontrado todas as referencias dos menus, pronto, problema com routes resolvido.
Agora o pior dos problemas foi resolvido apenas substitua onde tem *menu_path por *admin_menu_path e no controller onde recebe o valor :menu para :admin_menu

Ruby on Rails e Mysql

Bem comecei a programar em ruby, e já tive um problema que acho que vale a pena colocar aqui, é relativamente simples, eu preciso criar uma aplicação ruby que acesse o mysql. Simples?

Pois comigo deu o seguinte erro:

!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.
rake aborted!
126: The specified module could not be found. - C:/Ruby/lib/ruby/gems/1.8/gems/mysql-2.8.1-x86-mswin32/lib/1.8/mysql_api.so

(See full trace by running task with --trace)


Depois de um certo tempo de pesquisas, descobri que o MySql 5.1 não funciona direito com o Rails, então o que fazer?

Baixe a versão mais antiga da Dll do MySql: http://instantrails.rubyforge.org/svn/trunk/InstantRails-win/InstantRails/mysql/bin/libmySQL.dll.
Em seguida cole a dll na pasta bin do seu ruby, no meu caso fica no C:\Ruby\bin. Agora só reiniciar o mysql e tentar executar novamente.

Pronto, no meu caso o que aconteceu logo em seguida foi reclamar que a database não existe, mas essa é só foi criar uma database e colocar com o mesmo nome no acesso do arquivo do rails database.yml.

quarta-feira, 23 de dezembro de 2009

Carousel 3D Jquery

Estou ajudando um amigo em um projeto e ele me pediu para fazer um daqueles carrosséis em 3D do flash, mas bem eu como não sou um fã de carteirinha em usar flash simplesmente para isso, alguns motivos que talvez sejam por falta de domínio no assunto. De qualquer modo eu resolvi pesquisar se já existia algo pronto usando o Jquery, acabei encontrando o interface, me parece ser interessante

http://interface.eyecon.ro/

dei uma olhada nos demos, que acabaram atendendo o que meu amigo queria e olhei superficialmente o código, mas me pareceu algo bem feito.

Alem disso o interface me parece ter funções semelhantes ao jqueryui.

Talvez valha a pena dar uma olhada.

domingo, 15 de novembro de 2009

Jquery plug-ins

Aqui vai alguns plug-ins utilizando o jquery que achei muito interessante:

Um plug in para criar balões. Nos balões podem ser inseridos textos, imagens, animação em flash.
Usei esse plug-in e gostei bastante da simplicidade, tanto do código, quanto do tamanho.
http://www.mopstudio.jp/mopTip2descrip.html


Esse plug-in leve, serve para expandir tabelas, pode ser usado para organizar melhor as tabelas.

http://www.jankoatwarpspeed.com/post/2009/07/20/Expand-table-rows-with-jQuery-jExpand-plugin.aspx

sexta-feira, 30 de outubro de 2009

Login e senha com struts

Criei esse blog com alguns propósitos, o de guardar informações, códigos que eu criei ou que achei interessante pela internet, e verificar como minhas opiniões mudam ao decorrer do tempo. Lembro que quando eu entre na faculdade para mim pouco importava a qualidade de um código, o que importava era se funcionava, depois passei pela fase de melhor eficiência e agora como programador java, procuro conciliar eficiência com códigos limpos e intuitivos.

Estou desenvolvendo um projeto para a faculdade que é basicamente um sistema que acessa um banco de dados, temos o projeto e dezenas de modelos que fogem bastante da realidade do programa. E agora estou apenas codificando a parte de login e senha, a ideia é simplesmente o usuário digitar um login e senha, e verificar e permanecer logado. Meu projeto está usando alguns frameworks(spring, struts 2, hibernate). Frameworks que eu vi necessidade de aprender.

Logando> utilizei alguns tutoriais para entender o funcionamento do struts, basicamente o conteúdo desse site serviu: http://www.vaannila.com/

Primeiramente criei na página os forms de registro e de login, não organizei tabelas nem os divs, o struts por si só organiza de um jeito meio padrão. Ficou assim:

<s:form action="userLogin">
<s:textfield name="user.login" label="Usuario">
<s:password name="user.password" label="Senha">
<s:submit value="login">
</s:submit>

<s:form>
<s:password name="user.name" label="Nome do Aluno">
<s:textfield name="user.login" label="Usuario">
<s:password name="user.password" label="Senha">
<s:password name="user.ra" label="RA">
<s:password name="user.email" label="E-mail">
<s:submit value="register">
</s:submit>

Depois tive que organizar o struts.xml , além da configuração padrão que peguei de algum exemplo.

<package name="default" extends="struts-default">
<!-- Validar usuario -->
<action name="userLogin" class="org.ufabc.web.UserAction" method="login">
<result name="success">userHome.jsp</result>
<result name="input">index.jsp</result>
</action>
<!-- Cadastrar usuario -->
<action name="userRegister" class="org.ufabc.web.UserAction" method="register">
<result name="success">userHome.jsp</result>
<result name="input">index.jsp</result>
</action>

</package>

O que quis dizer com essa configuração é que os parâmetros irão vir da página index.jsp e se tudo ocorrer bem ele irá te mandar para o userHome. Bastante simples, pro action você coloca o nome(name), que é o nome da função do botão submmit, outra coisa é que esse Action é referenciado na classe UserAction que foi criada para a validação. E nessa parte também digo qual é o método que irei chamar na classe UserAction, no caso o método login e o register.