views:

98

answers:

1

I am developing an application in Rails 3 using a nosql database. I am trying to add a "Follow" feature similar to twitter or github.

In terms of markup, I have determined that there are three ways to do this.

1) Use a regular anchor. (Github Uses This Method)

<a href="/users/follow?target=Joe">Follow</a>

2) Use a button. (Twitter Uses This Method)

<button href="/friendships/create/">Follow</button>

3) Use a form with a submit button. (Has some advantages for me, but I haven't see anyone do it yet.)

<form method="post" id="connection_new" class="connection_new" action="/users/follow">
<input type="hidden" value="60d7b563355243796dd8496e17d36329" name="target" id="target">
<input type="submit" value="Follow" name="commit" id="connection_submit">
</form> 

Since I want to store the user_id in the database and not the username, options 1 and 2 will force me to do a database query to get the actual user_id, whereas option 3 will allow me to store the user_id in a hidden form field so that I don't have to do any database lookups. I can just get the id from the params hash on form submission.

I have successfully got each of these methods working, but I would like to know what is the best way to do this. Which way is more semantic, secure, better for spiders, etc...? Is there a reason both twitter and github don't use forms to do this?

Any guidance would be appreciated. I am leaning towards using the form method since then I don't have to query the db to get the id of the user, but I am worried that there must be a reason the big guys are just using anchors or buttons for this.

I am a newb so go easy on me if I am totally missing something. Thanks!

+1  A: 

It's really just based on personal preference. The simple anchor tag is nice and easy, shows clear intent, and is nice and concise. You can just create an AJAX post request with Javascript to make it all happen quickly. The database operation shouldn't be a problem. Even if it eventually will be too slow (though I doubt it), I'd say you're likely doing premature optimization.

bensie