Ich habe sowohl meine Login und Anmeldeformulare auf der gleichen Seite. Ich versuche zu spezifizieren, welche "Post" -Route basierend darauf genommen werden sollte, welches Formular gerade ausgefüllt wird. Der Post des Anmeldeformulars sollte an die Aktion create_user gesendet werden und der Post des Anmeldeformulars sollte an die create-Aktion gesendet werden. Bilden Sie einen Grund unabhängig von dem, was ich in der Ansicht angeben, die create_user Aktion - auch für das Login-Formular.Schienen spezifizieren Routen
Routen:
get '/login' => 'sessions#new', as: :users
post '/login' => 'sessions#create_user'
post '/login' => 'sessions#create'
Ausblick:
<div class="forms">
<div class="login">
<h3>Login</h3>
<%= form_for(:session, url: {action: "create"}) do |x| %>
<%= x.email_field :email, :placeholder => " Email", :style => "height:50px; width:350px; border: solid #ff4d4d; background-color:#eff5f5; margin-top:20px; padding-left:5px;" %>
<%= x.password_field :password, :placeholder => " Password", :style => "height:50px; width:350px; border: solid #ff4d4d; background-color:#eff5f5; margin-top: 35px; padding-left:5px;" %>
<%= x.submit "Login" %>
<% end %>
</div>
<div class="divide"></div>
<div class="signup">
<h3>Signup</h3>
<%= form_for @new_user, url: {action: "create_user"} do |x| %>
<%= x.text_field :name, :placeholder => " Name", :style => "height:50px; width:350px; margin-top:20px; border: solid #ff4d4d; background-color:#eff5f5; padding-left:5px;" %>
<%= x.email_field :email, :placeholder => " Email", :style => "height:50px; width:350px; margin-top:35px; border: solid #ff4d4d; background-color:#eff5f5; padding-left:5px;" %>
<%= x.password_field :password, :placeholder => " Password", :style => "height:50px; width:350px; margin-top:35px; border: solid #ff4d4d; background-color:#eff5f5; padding-left:5px;" %>
<%= x.submit "Submit" %>
<% end %>
</div>
</div>
Controller:
class SessionsController < ApplicationController
def new
@new_user = User.new
end
def create
@user = User.find_by_email(params[:session][:email])
if @user && @user.authenticate(params[:session][:password])
session[:user_id] = @user.id
redirect_to '/'
else
render '/login'
end
end
def create_user
@new_user = User.new(user_params)
if @new_user.save
session[:user_id] = @new_user.id
redirect_to '/'
else
render '/login'
end
end
def destroy
session[:user_id] = nil
redirect_to '/login'
end
private
def user_params
params.require(:user).permit(:name, :email, :password)
end
Nach dem Hinzufügen der Benutzerressourcen und Verschieben der neuen und create_user Aktionen in den Benutzer-Controller bekomme ich jetzt einen Argumentfehler, und ich denke, es ist, weil ich die Variable '@new_user' in der neuen Ansicht der Sitzung verwenden, während die Variable nur ist Präsentieren Sie in den Benutzern neue und erstellen Sie Aktionen. Wie behebe ich das? @Encylyr – nums
@nums Da das ein anderes Problem ist, schlägt angemessene Etikette auf Stapelaustausch vor, dass Sie diese korrekte Antwort stimmen, markieren Sie es als richtig, dann machen Sie eine neue Frage dafür :). – Ecnalyr
Ok, kann ich Sie auf die neue Frage verlinken? @ Ecnalyr – nums