I am trying to execute a Ruby method in my application_controller.rb from a button in my view. In a post yesterday, someone told me to use an Ajax call to do so because, without it, would just run on page load.
I'm very new to this and I have a hard time understanding it.
I installed the rails-Ajax gem, and it is added to my Gem file.
I followed "Integrate Ajax capabilities to Rails websites with history, bookmarking, partial refreshes, Rails flashes, user callbacks, scripts execution, redirections." untill step 5.
I just don't know what to do it next.
Here is my current configuration. The method only runs on page load:
My view:
<td><button type="button" onclick="executeit()" class="btn btn- default">executer</button></td>
<script>
function executeit() {
var selectingCommand = document.getElementById("CommandSelect");
var selectedCommand = selectingCommand.options[selectingCommand.selectedIndex].text;
var selectingServer = document.getElementById("serverlist");
var selectedServer = selectingServer.options[selectingServer.selectedIndex].text;
var username=document.getElementById("login").text;
var password=document.getElementById("password").text;
<%execute%>;
}
</script>
My method in application_controller.rb :
def execute
require 'rubygems'
require 'net/ssh'
@hostname = "smtlmon02"
@username = "test"
@password = "1234"
@cmd = "ls -al"
@cmd2 = "sudo su - -c 'ls;date'"
@cmd3 = "ls -alrt"
ssh = Net::SSH.start(@hostname, @username, :password => @password)
res = ssh.exec!(@cmd)
res2 = ssh.exec!(@cmd2)
ssh.close
puts res2
end
It would be fantastic if anyone could explain how to do it!
I am not sure I see your goal completely, however, if you just want to call a controller action when clicking on your button, I would approach it like this:
Here the HTML:
<a href='#' id='executer-button' class='btn btn-default'>Executer</a>
You should place this in you app/assets/javascripts/execute_caller.js:
//This function calls the "execute" controller action, using its route and also
//passes a "selectingCommand" variable to it
var callExecuter=function(){
$.ajax({
type:'GET',
url:'/executer_route',
data: { selectingCommand : document.getElementById("CommandSelect");
},
success:function(){
//I assume you want to do something on controller action execution success?
$(this).addClass('done');
}
});
}
$(document).on("click","#executer-button",callExecuter);
Then:
rake routes to see which is the appropiate route to the controller action execute. url field of the $.ajax(...) function.debuggeror pry gem, write debugger inside your def execute action controller, to make sure you reach there via ajax.success action in the ajax call accordingly, so it does what you want it to do.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With