Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rafael De Melo Barbosa

Adicionar Rota para view criada dentro de uma view gerada por scaffold

Recommended Posts

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.