f.submit doesn't work upon return of the form after an error in input has been submitted Rails 5.1.6
up vote
0
down vote
favorite
I have worked on this issue for over a week and cannot resolve it. I'd really appreciate any further suggestions.
I have a simple log-in procedure that was working prior to upgrade to Rails 5.1, but now:
a) The f.submit button works correctly upon first entry to the login form, the data in the login form is entered either correctly or incorrectly (i.e. logs the user in if correct; displays an error on the login form if entry is not correct)
b) The f.submit button does nothing (there is no system log activity) upon entering data into the login form after it has returned with an error message due to incorrect data entry - whether my input is correct or incorrect on second entry.
I have read every suggestion I have found and nothing works. I have:
Checked that f.submit is within the form
Checked that the params in the controller match the table schema
Checked for missing endings in the form, i.e. ' " ',/div, %>, comment endings....
Checked that when it does work the method is "post" and when new the method is "get"
Added "data: { disable_with: false }" in the button request statement upon seeing data-disable-with="login" when viewing the form's source. This does remove "data-disable-with="login", but the f.submit button still does not work.
Tried putting turbolinks-false:false in the request.
Player model (User):
Class Player < ActiveRecord::Base
attr_accessor :remember_token
before_save :downcase_email
VALID_EMAIL_REGEX = /A[w+-.]+@[a-zd-.]+.[a-z]+z/i
validates :email_address, presence: true, length: { maximum: 255},
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
has_secure_password
validates :password, presence: true, length: { minimum: 6 }
# Returns the hash digest of the given string.
validates :user_name, presence: true, length: { maximum: 15}
validates :age, presence: true
validates :gender, presence: true
validates :level, presence: true
validates :country_id, presence: true
belongs_to :country
has_many :player_bonuses
accepts_nested_attributes_for :player_bonuses
Session Controller - def CREATE:
def create
player = Player.find_by(email_address: params[:session][:email_address].downcase)
@player = player
if player && player.authenticate(params[:session][:password])
#Log the player
log_in player
params[:session][:remember_me] == '1' ? remember(player) : forget(player)
increment_points(player)
case @direct_flag
when 1
redirect_to return_bonus_path(:player_id => player.id)
when 2
redirect_to lobby_path(:player_id => player.id)
else
session[:last_page] =
redirect_to root_url
end
else
# Create an error message.
flash.now[:error] = "Invalid email/password combination"
render 'new'
end
end
Session helper:
module SessionsHelper
# Logs in the given player.
def log_in(player)
session[:player_id] = player.id
end
# Remembers a player in a persistent session.
def remember(player)
player.remember
cookies.permanent.signed[:player_id] = player.id
cookies.permanent[:remember_token] = player.remember_token
end
# Returns the player corresponding to the remember token cookie.
def current_player
if (player_id = session[:player_id])
@current_player ||= Player.find_by(id: player_id)
elsif (player_id = cookies.signed[:player_id])
player = Player.find_by(id: player_id)
log_in player
@current_player = player
end
end
# Returns true if the player is logged in, false otherwise.
def logged_in?
!current_player.nil?
end
# gets a persistent session.
def forget(player)
player.forget
cookies.delete(:player_id)
cookies.delete(:remember_token)
end
def log_out
forget(current_player)
session.delete(:player_id)
@current_player = nil
end
# Redirects to stored location (or to the default).
def redirect_back_or(default)
redirect_to(session[:forwarding_url] || default)
session.delete(:forwarding_url)
end
# Stores the URL trying to be accessed.
def store_location
session[:forwarding_url] = request.url if request.get?
end
end
"New" form:
<%= render 'layouts/loginheader' %>
<% provide(:title, "Log in") %>
<div class="row-fluid">
<div class="col-md-4"></div>
<div class="col-md-4">
<%= form_for(:session, url: login_path) do |f| %>
<h3>Log in</h3>
<div id="danger">
<%= flash[:error]%>
</div>
<div id="success">
<%= flash[:notice]%>
</div>
<br><%= f.label :email_address %>
<%= f.email_field :email_address, class: 'form-control' %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.label :remember_me, class: "checkbox inline" do %><br><br>
<%= f.check_box :remember_me %>
<span>Remember me on this computer</span>
<% end %>
<div class="actions">
<%= debug(params) if Rails.env.development? %>
<%= f.submit 'login',data: { disable_with: false },class: "btn btn-warning" %>
<%= link_to 'Register', register_path, class: "btn btn-warning" %>
</div>
<% end %>
<div class="col-md-4"></div>
</div>
</div>
Debugger output at time of failure:
--- !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
utf8: "✓"
authenticity_token:pLZrJe9UtOs67Y5bBB7Ag8DF8KIR85zy4j9ti4FwnrMi8DTA2o4Uf01VOKFSPAr6VnBMts+OUfFZaX2cKftUTA==
session: !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
email_address: xxxxxxx@bigpond.net.au
password: Luc
remember_me: '0'
permitted: false
commit: login
controller: sessions
action: create
permitted: false
Thanking you in advance!
ruby-on-rails-5.1
add a comment |
up vote
0
down vote
favorite
I have worked on this issue for over a week and cannot resolve it. I'd really appreciate any further suggestions.
I have a simple log-in procedure that was working prior to upgrade to Rails 5.1, but now:
a) The f.submit button works correctly upon first entry to the login form, the data in the login form is entered either correctly or incorrectly (i.e. logs the user in if correct; displays an error on the login form if entry is not correct)
b) The f.submit button does nothing (there is no system log activity) upon entering data into the login form after it has returned with an error message due to incorrect data entry - whether my input is correct or incorrect on second entry.
I have read every suggestion I have found and nothing works. I have:
Checked that f.submit is within the form
Checked that the params in the controller match the table schema
Checked for missing endings in the form, i.e. ' " ',/div, %>, comment endings....
Checked that when it does work the method is "post" and when new the method is "get"
Added "data: { disable_with: false }" in the button request statement upon seeing data-disable-with="login" when viewing the form's source. This does remove "data-disable-with="login", but the f.submit button still does not work.
Tried putting turbolinks-false:false in the request.
Player model (User):
Class Player < ActiveRecord::Base
attr_accessor :remember_token
before_save :downcase_email
VALID_EMAIL_REGEX = /A[w+-.]+@[a-zd-.]+.[a-z]+z/i
validates :email_address, presence: true, length: { maximum: 255},
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
has_secure_password
validates :password, presence: true, length: { minimum: 6 }
# Returns the hash digest of the given string.
validates :user_name, presence: true, length: { maximum: 15}
validates :age, presence: true
validates :gender, presence: true
validates :level, presence: true
validates :country_id, presence: true
belongs_to :country
has_many :player_bonuses
accepts_nested_attributes_for :player_bonuses
Session Controller - def CREATE:
def create
player = Player.find_by(email_address: params[:session][:email_address].downcase)
@player = player
if player && player.authenticate(params[:session][:password])
#Log the player
log_in player
params[:session][:remember_me] == '1' ? remember(player) : forget(player)
increment_points(player)
case @direct_flag
when 1
redirect_to return_bonus_path(:player_id => player.id)
when 2
redirect_to lobby_path(:player_id => player.id)
else
session[:last_page] =
redirect_to root_url
end
else
# Create an error message.
flash.now[:error] = "Invalid email/password combination"
render 'new'
end
end
Session helper:
module SessionsHelper
# Logs in the given player.
def log_in(player)
session[:player_id] = player.id
end
# Remembers a player in a persistent session.
def remember(player)
player.remember
cookies.permanent.signed[:player_id] = player.id
cookies.permanent[:remember_token] = player.remember_token
end
# Returns the player corresponding to the remember token cookie.
def current_player
if (player_id = session[:player_id])
@current_player ||= Player.find_by(id: player_id)
elsif (player_id = cookies.signed[:player_id])
player = Player.find_by(id: player_id)
log_in player
@current_player = player
end
end
# Returns true if the player is logged in, false otherwise.
def logged_in?
!current_player.nil?
end
# gets a persistent session.
def forget(player)
player.forget
cookies.delete(:player_id)
cookies.delete(:remember_token)
end
def log_out
forget(current_player)
session.delete(:player_id)
@current_player = nil
end
# Redirects to stored location (or to the default).
def redirect_back_or(default)
redirect_to(session[:forwarding_url] || default)
session.delete(:forwarding_url)
end
# Stores the URL trying to be accessed.
def store_location
session[:forwarding_url] = request.url if request.get?
end
end
"New" form:
<%= render 'layouts/loginheader' %>
<% provide(:title, "Log in") %>
<div class="row-fluid">
<div class="col-md-4"></div>
<div class="col-md-4">
<%= form_for(:session, url: login_path) do |f| %>
<h3>Log in</h3>
<div id="danger">
<%= flash[:error]%>
</div>
<div id="success">
<%= flash[:notice]%>
</div>
<br><%= f.label :email_address %>
<%= f.email_field :email_address, class: 'form-control' %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.label :remember_me, class: "checkbox inline" do %><br><br>
<%= f.check_box :remember_me %>
<span>Remember me on this computer</span>
<% end %>
<div class="actions">
<%= debug(params) if Rails.env.development? %>
<%= f.submit 'login',data: { disable_with: false },class: "btn btn-warning" %>
<%= link_to 'Register', register_path, class: "btn btn-warning" %>
</div>
<% end %>
<div class="col-md-4"></div>
</div>
</div>
Debugger output at time of failure:
--- !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
utf8: "✓"
authenticity_token:pLZrJe9UtOs67Y5bBB7Ag8DF8KIR85zy4j9ti4FwnrMi8DTA2o4Uf01VOKFSPAr6VnBMts+OUfFZaX2cKftUTA==
session: !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
email_address: xxxxxxx@bigpond.net.au
password: Luc
remember_me: '0'
permitted: false
commit: login
controller: sessions
action: create
permitted: false
Thanking you in advance!
ruby-on-rails-5.1
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have worked on this issue for over a week and cannot resolve it. I'd really appreciate any further suggestions.
I have a simple log-in procedure that was working prior to upgrade to Rails 5.1, but now:
a) The f.submit button works correctly upon first entry to the login form, the data in the login form is entered either correctly or incorrectly (i.e. logs the user in if correct; displays an error on the login form if entry is not correct)
b) The f.submit button does nothing (there is no system log activity) upon entering data into the login form after it has returned with an error message due to incorrect data entry - whether my input is correct or incorrect on second entry.
I have read every suggestion I have found and nothing works. I have:
Checked that f.submit is within the form
Checked that the params in the controller match the table schema
Checked for missing endings in the form, i.e. ' " ',/div, %>, comment endings....
Checked that when it does work the method is "post" and when new the method is "get"
Added "data: { disable_with: false }" in the button request statement upon seeing data-disable-with="login" when viewing the form's source. This does remove "data-disable-with="login", but the f.submit button still does not work.
Tried putting turbolinks-false:false in the request.
Player model (User):
Class Player < ActiveRecord::Base
attr_accessor :remember_token
before_save :downcase_email
VALID_EMAIL_REGEX = /A[w+-.]+@[a-zd-.]+.[a-z]+z/i
validates :email_address, presence: true, length: { maximum: 255},
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
has_secure_password
validates :password, presence: true, length: { minimum: 6 }
# Returns the hash digest of the given string.
validates :user_name, presence: true, length: { maximum: 15}
validates :age, presence: true
validates :gender, presence: true
validates :level, presence: true
validates :country_id, presence: true
belongs_to :country
has_many :player_bonuses
accepts_nested_attributes_for :player_bonuses
Session Controller - def CREATE:
def create
player = Player.find_by(email_address: params[:session][:email_address].downcase)
@player = player
if player && player.authenticate(params[:session][:password])
#Log the player
log_in player
params[:session][:remember_me] == '1' ? remember(player) : forget(player)
increment_points(player)
case @direct_flag
when 1
redirect_to return_bonus_path(:player_id => player.id)
when 2
redirect_to lobby_path(:player_id => player.id)
else
session[:last_page] =
redirect_to root_url
end
else
# Create an error message.
flash.now[:error] = "Invalid email/password combination"
render 'new'
end
end
Session helper:
module SessionsHelper
# Logs in the given player.
def log_in(player)
session[:player_id] = player.id
end
# Remembers a player in a persistent session.
def remember(player)
player.remember
cookies.permanent.signed[:player_id] = player.id
cookies.permanent[:remember_token] = player.remember_token
end
# Returns the player corresponding to the remember token cookie.
def current_player
if (player_id = session[:player_id])
@current_player ||= Player.find_by(id: player_id)
elsif (player_id = cookies.signed[:player_id])
player = Player.find_by(id: player_id)
log_in player
@current_player = player
end
end
# Returns true if the player is logged in, false otherwise.
def logged_in?
!current_player.nil?
end
# gets a persistent session.
def forget(player)
player.forget
cookies.delete(:player_id)
cookies.delete(:remember_token)
end
def log_out
forget(current_player)
session.delete(:player_id)
@current_player = nil
end
# Redirects to stored location (or to the default).
def redirect_back_or(default)
redirect_to(session[:forwarding_url] || default)
session.delete(:forwarding_url)
end
# Stores the URL trying to be accessed.
def store_location
session[:forwarding_url] = request.url if request.get?
end
end
"New" form:
<%= render 'layouts/loginheader' %>
<% provide(:title, "Log in") %>
<div class="row-fluid">
<div class="col-md-4"></div>
<div class="col-md-4">
<%= form_for(:session, url: login_path) do |f| %>
<h3>Log in</h3>
<div id="danger">
<%= flash[:error]%>
</div>
<div id="success">
<%= flash[:notice]%>
</div>
<br><%= f.label :email_address %>
<%= f.email_field :email_address, class: 'form-control' %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.label :remember_me, class: "checkbox inline" do %><br><br>
<%= f.check_box :remember_me %>
<span>Remember me on this computer</span>
<% end %>
<div class="actions">
<%= debug(params) if Rails.env.development? %>
<%= f.submit 'login',data: { disable_with: false },class: "btn btn-warning" %>
<%= link_to 'Register', register_path, class: "btn btn-warning" %>
</div>
<% end %>
<div class="col-md-4"></div>
</div>
</div>
Debugger output at time of failure:
--- !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
utf8: "✓"
authenticity_token:pLZrJe9UtOs67Y5bBB7Ag8DF8KIR85zy4j9ti4FwnrMi8DTA2o4Uf01VOKFSPAr6VnBMts+OUfFZaX2cKftUTA==
session: !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
email_address: xxxxxxx@bigpond.net.au
password: Luc
remember_me: '0'
permitted: false
commit: login
controller: sessions
action: create
permitted: false
Thanking you in advance!
ruby-on-rails-5.1
I have worked on this issue for over a week and cannot resolve it. I'd really appreciate any further suggestions.
I have a simple log-in procedure that was working prior to upgrade to Rails 5.1, but now:
a) The f.submit button works correctly upon first entry to the login form, the data in the login form is entered either correctly or incorrectly (i.e. logs the user in if correct; displays an error on the login form if entry is not correct)
b) The f.submit button does nothing (there is no system log activity) upon entering data into the login form after it has returned with an error message due to incorrect data entry - whether my input is correct or incorrect on second entry.
I have read every suggestion I have found and nothing works. I have:
Checked that f.submit is within the form
Checked that the params in the controller match the table schema
Checked for missing endings in the form, i.e. ' " ',/div, %>, comment endings....
Checked that when it does work the method is "post" and when new the method is "get"
Added "data: { disable_with: false }" in the button request statement upon seeing data-disable-with="login" when viewing the form's source. This does remove "data-disable-with="login", but the f.submit button still does not work.
Tried putting turbolinks-false:false in the request.
Player model (User):
Class Player < ActiveRecord::Base
attr_accessor :remember_token
before_save :downcase_email
VALID_EMAIL_REGEX = /A[w+-.]+@[a-zd-.]+.[a-z]+z/i
validates :email_address, presence: true, length: { maximum: 255},
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
has_secure_password
validates :password, presence: true, length: { minimum: 6 }
# Returns the hash digest of the given string.
validates :user_name, presence: true, length: { maximum: 15}
validates :age, presence: true
validates :gender, presence: true
validates :level, presence: true
validates :country_id, presence: true
belongs_to :country
has_many :player_bonuses
accepts_nested_attributes_for :player_bonuses
Session Controller - def CREATE:
def create
player = Player.find_by(email_address: params[:session][:email_address].downcase)
@player = player
if player && player.authenticate(params[:session][:password])
#Log the player
log_in player
params[:session][:remember_me] == '1' ? remember(player) : forget(player)
increment_points(player)
case @direct_flag
when 1
redirect_to return_bonus_path(:player_id => player.id)
when 2
redirect_to lobby_path(:player_id => player.id)
else
session[:last_page] =
redirect_to root_url
end
else
# Create an error message.
flash.now[:error] = "Invalid email/password combination"
render 'new'
end
end
Session helper:
module SessionsHelper
# Logs in the given player.
def log_in(player)
session[:player_id] = player.id
end
# Remembers a player in a persistent session.
def remember(player)
player.remember
cookies.permanent.signed[:player_id] = player.id
cookies.permanent[:remember_token] = player.remember_token
end
# Returns the player corresponding to the remember token cookie.
def current_player
if (player_id = session[:player_id])
@current_player ||= Player.find_by(id: player_id)
elsif (player_id = cookies.signed[:player_id])
player = Player.find_by(id: player_id)
log_in player
@current_player = player
end
end
# Returns true if the player is logged in, false otherwise.
def logged_in?
!current_player.nil?
end
# gets a persistent session.
def forget(player)
player.forget
cookies.delete(:player_id)
cookies.delete(:remember_token)
end
def log_out
forget(current_player)
session.delete(:player_id)
@current_player = nil
end
# Redirects to stored location (or to the default).
def redirect_back_or(default)
redirect_to(session[:forwarding_url] || default)
session.delete(:forwarding_url)
end
# Stores the URL trying to be accessed.
def store_location
session[:forwarding_url] = request.url if request.get?
end
end
"New" form:
<%= render 'layouts/loginheader' %>
<% provide(:title, "Log in") %>
<div class="row-fluid">
<div class="col-md-4"></div>
<div class="col-md-4">
<%= form_for(:session, url: login_path) do |f| %>
<h3>Log in</h3>
<div id="danger">
<%= flash[:error]%>
</div>
<div id="success">
<%= flash[:notice]%>
</div>
<br><%= f.label :email_address %>
<%= f.email_field :email_address, class: 'form-control' %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.label :remember_me, class: "checkbox inline" do %><br><br>
<%= f.check_box :remember_me %>
<span>Remember me on this computer</span>
<% end %>
<div class="actions">
<%= debug(params) if Rails.env.development? %>
<%= f.submit 'login',data: { disable_with: false },class: "btn btn-warning" %>
<%= link_to 'Register', register_path, class: "btn btn-warning" %>
</div>
<% end %>
<div class="col-md-4"></div>
</div>
</div>
Debugger output at time of failure:
--- !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
utf8: "✓"
authenticity_token:pLZrJe9UtOs67Y5bBB7Ag8DF8KIR85zy4j9ti4FwnrMi8DTA2o4Uf01VOKFSPAr6VnBMts+OUfFZaX2cKftUTA==
session: !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
email_address: xxxxxxx@bigpond.net.au
password: Luc
remember_me: '0'
permitted: false
commit: login
controller: sessions
action: create
permitted: false
Thanking you in advance!
ruby-on-rails-5.1
ruby-on-rails-5.1
edited Nov 20 at 2:21
asked Nov 19 at 2:17
user3331154
7019
7019
add a comment |
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53367456%2ff-submit-doesnt-work-upon-return-of-the-form-after-an-error-in-input-has-been-s%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown