Reputation: 23
I'm wondering how I can embed Rails code inside an html.erb so that I can run a Ruby function on the press of a button. I've googled around, and if this is not possible, how could I run a JavaScript function that updates variables inside a Ruby on Rails database?
Upvotes: 0
Views: 4626
Reputation: 85792
I think we need to talk a bit about how the web works. No worries; this is confusing for a lot of people when they first start building web apps.
There are two types of code here. The first type is the server-side code, which runs on your server. In this case, it's Ruby code, and the user can't see it. This server-side code generates the second type of code, client-side code. In this case, it's Javascript code, since that's what browsers understand. The user can see it and even modify it, and it runs on the user's computer.
Since the database lives on your server, and is not publicly accessible (after all, wouldn't that be pretty bad?), you will have to use server-side code to interact with the database. Code that runs on the user's browser cannot directly interact with the database, so you'll have to use a kind of "glue" technology here.
One way of doing that is an AJAX request. This is when your Javascript code tells the browser to send a message to your server and wait for a response. This could happen on, say, a button click. Then, the server can handle the request as usual, interact with the database, whatever, and send the result back to the browser. To the user, however, all they see is that clicking the button takes the action they expect, and that's all that matters.
There are a few ways to go about implementing AJAX in a Rails application. Rails has a few built-in methods to look into, like button_to_remote
in Rails 2 or button_to
with the :remote
option in Rails 3, that can help simplify the process. Or, you can write the AJAX code yourself, and even Googling "AJAX tutorial" would be a good starting point. I'd start with the Rails helpers, though, since they usually make things pretty simple for beginners.
Good luck!
Upvotes: 12
Reputation: 1686
You could use an JS AJAX request to request a backend ERB file, which then accesses the database.
Using AJAX with JS
Using AJAX in jQuery
Upvotes: 1