Link as a link AND as a function

Hi there,

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.

Thank you in advance.

Quoting M. Murillo [email protected]:

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.

HTH,
Jeffrey

<%= 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);
}

Jeffrey L. Taylor wrote:

Quoting M. Murillo [email protected]:
<%= 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?

Thanks again Jeffrey.

Quoting M. Murillo [email protected]:

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.

HTH,
Jeffrey

Gotcha! Perfect. Thank you Jeffrey.

I got it to work with the following.

In my view:

<%= link_to_function truncate(link.name, 60),
“clickThru(’#{link.link}’,’#{link[:id]}’, ‘votes’)”,
:title => link.name, :href => link.link %>

In my application.js

function clickThru(url, id, verb) {
new Ajax.Request(’/links/’+id+’/’+verb,
{asynchronous:true, evalScripts:true, method:‘post’});
window.open(url);
}

Thank you so much! This was awesome and your advise came at the end of
maybe 5 hours of internet searching.