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.