Passing javascript variables to rails controller Passing javascript variables to rails controller ruby-on-rails ruby-on-rails

Passing javascript variables to rails controller


Technically you cant pass variables between two languages.

You can pass those values to rails controller by appending in url

<script>var mdate = "26 December 2013";var phone = prompt('Enter your phone!');if (phone) {    //Passing mdate and phone variables to rails controller(book_date & phone)    window.open("localhost:3000//controller/create?mdate="+mdate+"&phone="+phone,"_self")}else{    alert("Cancelled");}</script>

In your controller

def create    data = params[:date]    phone = params[:phone]    @booking = Booking.new(book_param)    if @booking.save        redirect_to root_url    else        flash[:notice_booking_failed] = true        redirect_to root_url    endend

NOTE: Make sure you configure your config/route.rb accordingly

More Info http://guides.rubyonrails.org/routing.html


Ajax code in jQuery:

$("#submit_button").submit(function(event) {  /* stop form from submitting normally */   event.preventDefault();  /* get values from elements on the page: */   var mdate = $('#mdate').val();   var phone = $('#phone').val();  /* Send the data using post and put the results in a div */    $.ajax({      url: "/BookCreate/?mdate="+mdate+"&phone="+phone,      type: "post",      data: values,      success: function(){        alert('Saved Successfully');      },      error:function(){       alert('Error');      }    });});

Routes : ( As I am assuming your controller name is book )

match '/BookCreate', to: 'book#create'

For this you have to add jquery file to your code or this link

<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script><script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>

enter image description here


You can use something like

$.post("/bookings?booking[phone]=" + phone + "&booking[book_date]=" + mdate)

It will go to BookingsController#create action with params hash:

{ booking: { phone: "entered from prompt", book_date: "26 December 2013" } }