Problem z parametrami po wypełnieniu formularza


#1

Część,
Mam problem z parametrami przekazywanymi do kontrolera po wypełnieniu formularza.

Widok:

<form class="col-12" method="post" action="/login/check_login">
    <div class="form-group">
      <i class="material-icons form-icon">email</i>
      <input type="email" name="email" class="form-control" placeholder="Podaj swój email..." />
    </div>
    <div class="form-group">
      <i class="material-icons form-icon">lock</i>
      <input type="password" name="password" class="form-control" placeholder="Wprowadź hasło..." />
    </div>
    <% if flash[:alert] %>
      <div class="alert"><%= flash[:alert] %></div>
    <% end %>
    <button class="btn login-button" type="submit"><i class="small material-icons arrow-icon">subdirectory_arrow_right</i>Zaloguj</button>
    <div class="col-12 forgot">
      <a href="#">Zapomniałeś hasła? </a>
    </div>
  </form>
</div> <!-- End of modal -->

Kotroler:

  def check_login
    @user = User.find_by_email params[:email]
    byebug
    if @user
        redirect_to controller: 'dashboard', action: 'index'
else
       flash.alert = 'Logowanie nie powiodło się'
       render 'index'
end

end

Na byebug-u pokazuje mi params[:email] = ‘check_login’, kiedy zmienie nazwe w input np. na name=‘email1’ to normalnie mam params[:email1] = wpisany login. Dlaczego tak się dzieje?


#2

Hej,
Zgaduje że błąd masz tutaj:
<form class="col-12" method="post" action="/login/check_login">
Czyli w action powinno być tylko “/login”.
Nie wiem jak wygląda twój plik routes.rb, ale zgaduje że masz tam coś w stylu:
post '/login/:email', to: 'login#check_login'
Wpisz w terminalu: rails routes -c login i sprawdź czy nie masz takiego endpointa.
Dlatego z automatu do params[:email] przypisuje ‘check_login’.


#3

W samo sedno. Dziękuje za pomoc !:wink: