Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá galera, sou novo no fórum. Estou estudando ruby on rails e ainda me encontro em um nível bem leigo.
Espero estar contribuindo com a galera tão logo.
Bem, meu problema é bem básico, acredito eu. Realizei um scaffold para criar o modelo User. Ele me gerou as views e etc…
Criei uma nova view dentro do diretório users chamada login.html.erb, quero aprender a criar uma rota para acessar esta view, no controller ela tem que carregar apenas o html com o email e senha, campos do modelo, para que ao clicar em submit, o método login seja chamado.
Alguém me ajuda?
Meu arquivo de rotas ficou assim:
Cbapp::Application.routes.draw do
resources :users
get “users/login”
end
E ao tentar abrir http://localhost:3000/users/login
da o erro: Couldn’t find User with id=login
Eu não sei resolver este conflito...
Olá Rafael,
Acredito que para o que está querendo, você deve adicionar:
resources :users do
get :login, on: :collection
end
ou:
match "/users/login", to: "users#login"
Porém este método de login não é dos melhores.
O mais correto seria você ter um controller para session. Existe um episódio no railscasts que explica bem como fazer autenticação de usuários:
http://railscasts.com/episodes/250-authentication-from-scratch
Outra dica, é utilizar o Devise para fazer esta parte de autenticação / cadastro de usuários. É uma excelente gem e utilizada em muitos projetos rails.
Vai te poupar um bom tempo, pois tem praticamente todas as funções necessárias para autenticação de usuários. Segue o link: https://github.com/plataformatec/devise
Caso tenha dúvidas sobre como utilizar gems ou o devise, existe também um episódio no railscasts ensinando a utilizar a gem.
Obrigado bruno! problema resolvido. estou estudando e entendi melhor essa parte de rotas. apesar de achar que as roras para as views deveriam ser mais automatizadas eu compreendi a finalidade. Achei beeeem ruim a solução do rails pra isso :P
abs
É porque você não está seguindo o modelo REST (eu também acabo não seguindo para tudo), mas o Rails leva em conta aplicações RESTful e o bom convention over configuration, tornando esta parte de rotas bem automatizadas caso sua aplicação seja RESTful.
Por exemplo, no caso do seu login, você teria um controller sessions, e não precisaria de definir todas as rotas para ele.
Com o tempo, se continuar trabalhando com rails verá que seguindo o REST e fazendo seus controllers desta forma é bem rápido, simples e útil, além da facilidade para criar APIs caso precise.
Aqui tem um artigo interessante sobre o assunto, com um exemplo de uma aplicação que teve as rotas refatoradas para o modelo RESTful:
http://www.scottraymond.net/2006/7/20/refactoring-to-rest/
Perceba que o resultado final deixa as rotas bem definidas, o que facilita muito na hora de escrever os testes também.
>
Olá galera, sou novo no fórum. Estou estudando ruby on rails e ainda me encontro em um nível bem leigo.
Espero estar contribuindo com a galera tão logo.
Bem, meu problema é bem básico, acredito eu. Realizei um scaffold para criar o modelo User. Ele me gerou as views e etc…
Criei uma nova view dentro do diretório users chamada login.html.erb, quero aprender a criar uma rota para acessar esta view, no controller ela tem que carregar apenas o html com o email e senha, campos do modelo, para que ao clicar em submit, o método login seja chamado.
Alguém me ajuda?
Meu arquivo de rotas ficou assim:
Cbapp::Application.routes.draw do
resources :users
get “users/login”
end
E ao tentar abrir http://localhost:3000/users/login
da o erro: Couldn’t find User with id=login
Eu não sei resolver este conflito...
tentei depois assim:
Cbapp::Application.routes.draw do
resources :users
collection “login”
end
erro: Couldn’t find User with id=login
tenho que por algo no controller?
a pagina de login tá assim:
<%= form_for(@user) do |f| %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= f.label :password %>
<%= f.text_field :password %>
<%= f.submit %>
<% end %>
após ler o guide, alterei o arquivo de rota para:
Cbapp::Application.routes.draw do
resources :users do
member do
get ‘login’
end
end
end
mesmo assim o erro persiste.
devo alterar algo no controller?