Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Call controller method with rails-Ajax?

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!

like image 395
Guillaume Caillé Avatar asked Jun 10 '26 15:06

Guillaume Caillé


1 Answers

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:

  1. Check your rake routes to see which is the appropiate route to the controller action execute.
  2. Replace it in the url field of the $.ajax(...) function.
  3. Assuming you have either debuggeror pry gem, write debugger inside your def execute action controller, to make sure you reach there via ajax.
  4. Edit your on success action in the ajax call accordingly, so it does what you want it to do.
like image 105
lllllll Avatar answered Jun 13 '26 12:06

lllllll



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!