I am relatively new to Rails and I am trying to do a fairly common task.
I have a page that displays a series of links that go to offsite URLS.
Next to each link is a counter that shows how many times that link has
been clicked-through. I would like to be able to have the user click on
a the link, be directed to the links address, AND at the same time, have
a function create and add a "click-through" to the "clicks" database.
I was reading about the link_to_function helper but that doesn't seem to
be quite what I want, but then again, I may not be understanding it
completely.
Does anyone have any method for doing anything similar in their apps? I
would love an help or advice.
I am relatively new to Rails and I am trying to do a fairly common task.
I have a page that displays a series of links that go to offsite URLS.
Next to each link is a counter that shows how many times that link has
been clicked-through. I would like to be able to have the user click on
a the link, be directed to the links address, AND at the same time, have
a function create and add a "click-through" to the "clicks" database.
I was reading about the link_to_function helper but that doesn't seem to
be quite what I want, but then again, I may not be understanding it
completely.
Link to a function like the following. It makes a GET request to the server
and opens a new window to the url. The link_to also follows.
function clickThru(url, id, verb) {
new Ajax.Request('/articles/'+id+'/'+verb,
{asynchronous:true, evalScripts:true, method:'get'});
window.open(url);
}
Thank you Jeffrey. I played around with it a bit and was wondering how
the function intends to post to the clicks database. Is it by using
that "id" => "click"? Or does "click" in your example refer to a method
in a controller?
Jeffrey L. Taylor wrote:
> Quoting Michael Murillo <lists@ruby-forum.com>:
> <%= link_to_function truncate(article.title, 60),
> "clickThru('#{article.url}','#{article[:id]}', 'click')",
> :title => article.feed.title, :href => article[:id] %>
>
>
> function clickThru(url, id, verb) {
> new Ajax.Request('/articles/'+id+'/'+verb,
> {asynchronous:true, evalScripts:true, method:'get'});
> window.open(url);
> }
Thank you Jeffrey. I played around with it a bit and was wondering how
the function intends to post to the clicks database. Is it by using
that "id" => "click"? Or does "click" in your example refer to a method
in a controller?
Sorry for the slow reply. I have been at SxSW Interactive for the last 5
days.
This code is copied from my app, it will need some editing for your app.
Ajax.request() is in the Prototype Javascript library, it makes a request to
the server. The first parameter is the URL to call, the rest is copied from
the code generated by link_to_remote. evalScripts:true indicates Javascript
is expected in the reply and should be evaluated, method:'get' indicates to
make a HTTP GET request instead of the default POST. The action on the server
calls the model(s) to update the database.