How to trace a html button non-event? (Rails Authorization With Pundit)

This is my first post here. Comments on style, etc., are appreciated. An answer is even more appreciated. This is a continuation of my question at https://stackoverflow.com/questions/44856528/how-to-trace-a-html-button-non-event-rails-authorization-with-pundit The problem: Figure 1: I have a form:

The first time I visit this page, everything seems to work. I can click on “Change Role” and update the appropriate row in the Postgres table. I can do it as many times as I like with no problems. If I click on, for instance, somename@yahoo.com (highlighted in yellow), I get to the following page: Figure 2: The above is just fine. If I click on Users on the upper right, I return to the webage denoted as Figure 1. Now things get, hmm, (un)interesting. When I click on Change Role, nothing happens. I have hooked up Wireshark and I am almost 100% sure I see no Post going out when I click on Change Role. I am pretty sure I see no outbound http when I click on Change Role **If I refresh the page, Change Role starts working again!**I am clueless where to look or what is going on.

app/controllers/users_controller.rb

class UsersController < ApplicationController # See ruby - Rails 4: before_filter vs. before_action - Stack Overflow

“As we can see in ActionController::Base, before_action is just a new syntax for before_filter”

before_action :ralph_before_action after_action :ralph_after_action

before_filter :authenticate_user! after_action :verify_authorized

def index # byebug if ralph_test_byebug @users = User.all authorize User end

def show byebug if ralph_test_byebug @user = User.find(params[:id]) authorize @user end

def update # byebug # if ralph_test_byebug @user = User.find(params[:id]) authorize @user byebug # if ralph_test_byebug if @user.update_attributes(secure_params) redirect_to users_path, :notice => “User updated.” else redirect_to users_path, :alert => “Unable to update user.” end end

def destroy user = User.find(params[:id]) authorize user user.destroy redirect_to users_path, :notice => “User deleted.” end

private

def secure_params params.require(:user).permit(:role) end

def ralph_before_action # byebug xyz=123 end

def ralph_after_action # byebug xyz=123 end

end

``

app/views/users/index.html.erb

<% @users.each do |user| %> <%= render user %> <% end %>

``

app/views/users/_user.html.erb

<%= link_to user.email, user %> <%= form_for(user) do |f| %> <%= f.select(:role, User.roles.keys.map {|role| [role.titleize,role]}) %> <%= f.submit 'Change Role' %> <% end %> <%= link_to("Delete user", user_path(user), :data => { :confirm => "Are you sure?" }, :method => :delete, :class => 'button') unless user == current_user %>

``

Hey Ralph,

The code that you posted looks good to me. This feels like a Turbolinks issue since it goes away after a refresh - are you using Turbolinks? If so, try disabling it.

If that doesn’t work or isn’t applicable, it might help if you could reproduce the issue somewhere like http://code.runnable.com

Jim

May all the gods of all the religions bless you, your house, your family, your extended family, and your friends with health, happiness, long life, and great wealth.

Jesus, I spent an entire week on this!!!

Do you know of a document or link that explains how Turbolinks works?

Ralph

Hey Ralph,

Happy to help! The readme is a great resource: GitHub - turbolinks/turbolinks: Turbolinks makes navigating your web application faster

Jim