CUSTOM VALIDATION IN PAPERCLIP

In this short tutorial, I will explain you how you can add custom validation messages on the Attachment if you’re using Paperclip plugin or gem.

Way 1. This will work if you’re running your rails application on Windows Machine.
Solution: a) install mimetype-fu plugin.
b) Once installed, open Model, where paperclip settings has been defined. In my case, its User Model. Open it and add:

has_attached_file :avatar
validate :prohibited_ext
protected
def prohibited_ext
errors.add(:avatar, “Format #{File.mime_type?(avatar.path)} is invalid!”) unless File.mime_type?(avatar.path) == “application/exe”
end

UPGRADE RAILS PERFORMANCE

In this article, we will try to Enhance our rails application performance.

To know, how is your rails application is performing on different environments, you must need some plugin or gem. There are many gems/plugins already available which you can use and analyze the performance.

First of all, I would like to list down those, which I will cover in my next tutorials.

Once you configure anyone of those, you’ll come to know how is your rails application is performing. I personally advise to use New Relic or Rack-Bug.

There are several ways, where you can upgrade you rails application performance. Let’s see what are those and how they work…

  • Enable Caching
  • Load Less SQL Queries
  • Avoid using before_filter for loading heavy data

JOINS IN SQL

Sometimes, its very hard to keep Joins concept in mind.. Being a beginner, experienced SQL programmer, you should know the concept of JOINS.

In this article, I will show you the difference between:
1. JOINS and INCLUDE
2. How to you use JOINS in rails
3. JOINS over INCLUDE
4. JOINS and INCLUDE in RAILS-3

Let’s cover them in detail:
What is Join ?
The SQL JOIN clause is used whenever we have to select data from 2 or more tables.

To be able to use SQL JOIN clause to extract data from 2 (or more) tables, we need a relationship between certain columns in these tables.

Joins Type
1. OUTER JOIN
1.a. LEFT OUTER JOIN
1.b. RIGHT OUTER JOIN
2. Inner Join

Let’s take an example here:

<images comes here />

The INNER JOIN will select all rows from both tables as long as there is a match between the columns we are matching on. In case we have a customer in the Customers table, which still hasn’t made any orders (there are no entries for this customer in the Sales table), this customer will not be listed in the result of our SQL query above.

The second type of SQL JOIN is called SQL OUTER JOIN and it has 2 sub-types called LEFT OUTER JOIN and RIGHT OUTER JOIN.

The LEFT OUTER JOIN or simply LEFT JOIN (you can omit the OUTER keyword in most databases), selects all the rows from the first table listed after the FROM clause, no matter if they have matches in the second table.

So, far you must be cleared with what JOIN does!! Now, we will see what JOINS and INCLUDE gives us….

Consider these two statements:

User.find(:first, :include => :user_profiles)
User.find(:first, :joins => :albums)

<I am going to update this post soon.>

SEND TWEETS FROM RAILS APPLICATION

So, we’re continuing from here: https://puneetitengineer.wordpress.com/2009/08/12/send-tweets-fr…ls-application/

So far we’ve covered the basics of it, now its time to create some controllers…. Open your command/terminal and fire this command:

ruby script/generate controller twitt

Once you’re done, open this file and write the below code inside it:

class TwittController < ApplicationController

gem(‘twitter4r’, ‘>=0.2.0′)
require ‘twitter’
require ‘twitter_search’
require ‘rubygems’
before_filter :authorize, :except => [:login, :authenticate, :save_users, :twitter_cred]

def login
@user = User.new
end

def authenticate

@user = User.new(params[:user])
client = Twitter::Client.new
if client.authenticate?(@user.username, @user.password)
@username = User.save_users(params[:user])
session[:user_id] = @user.id
session[:username] = @user.username
session[:password] = @user.password
redirect_to :action =>’post_status’
else
render :action =>’login’
end

end

end

Now, open /app/views/twitt/login.html.erb and paste below lines:

<% form_for :user, :url => { :action => :authenticate } do |form| %>

<%= label :user, :username, “UserName:” %>
<%= form.text_field :username, :size => 30 %>

<%= label :user, :password, “Password:” %>
<%= form.password_field :password, :size => 30 %>

<%= submit_tag “login” , :class => “submit” %>
<% end %>

INTEGRATE ORACLE WITH RUBY

Since most of the rails application is now using various databases, this article will show you how you can useORACLE database with rails.

For that, we need Oracle XE

I will update this post as soon as I can…. Apologize for the dealy. However, you can mail me any of your query if you are stuck in configuring Oracle with Rails.

INTEGRATING CUCUMBER & RPSEC WITH RAILS

Hi Guys,

In this article I will cover how to use cucumber and Factory Girl to write Stories in Rails.
TDD(Test Driven Development) is the most powerful and most approachable concept in most of the programming language. When it comes to rails, it provides a convenient and simplest way to writeUnit test cases and the stories for your controller, without writing complex lines of code.
Let’s see how you can cover the test coverage for your rails application.
IMPORTANT: The concept behind using cucumber, so that we can write the ‘stories’, which will tell us how our controller’s method behaves when its called.
To get started, install the cucumber gem on your machine by typing:
gem install cucumber
and you’ll find progress like this:

<images comes here />

Next, you need to install rspec and rspec-rails. To do that type:
gem install rspec
gem install rspec-rails

WHAT IS MONGO-DB

What is MongoDB?
I saw many forums, visited many blogs, people/programmers are talking about MongoDB a lot. I was wondering what this is! Why developers are showing more and more interest in this. I started searching around and now sharing with all of you, who are not friendly with MongoDB or who’re familiar but don’t know how to work on it.

First of all let’s define mongoDB in terms of technical aspect
a) MongoDB has collections of data, not tables.
b) Its a document-oriented database.
c) MongoDB has namespaces for data.
d) You don’t ever need to worry about migrations due to Mongo’s schema-less nature.
e) You can define indexing options too.

So far, what my learning works here that it has nothing to do with the migrations, tables. In short if I say, it is a database in a documented form, a separate entity as compared to MySQL or different databases, am I wrong?

Ok, try to put your brain to understand this, because from here I will try to cover some real world examples to explain how it works… :)

How to install MongoDB
A) gem install mongo
It will install mongo with bson.. something like this screenshot

<image comes here />

B) gem install mongo_mapper

I think, these two gems are sufficient to give you some kind of acceleration. Let’s proceed further and create a model, fire this command
C) ruby script/generate model Book –skip-migration

<image comes here />

D) Let’s enter some fields into it, as I said it has nothing to do with the migration, so what are the columns that we want, we will create here itself, See how:

<image comes here />

DON’T HESITATE TO TRY OUT NEW THINGS IN RUBY

Since last couple of months, I was trying installing Rails-3 on my Windows PC.
When I heard, that Rails-3 requires ruby-1.8.7 or higher, I instantly removed Ruby-1.8.6 and all its components and installed 1.8.7 from the fresh point.

I was happy, as my new system has Rails-3 now… Wow, what else I need?

But later, I found that my few of my old applications, which requires ruby-1.8.6 have stopped working. WTH!! Can’t it work with Ruby-1.8.7 now? With the investigation, I observed that, there were few libraries which were specific to 1.8.6 version and are not in 1.8.7 now. Some of them, I restored from 186 to 187 but were not compatible. Urrrgghhh!!! I am disappointed :-(

Now, I need some sort of version Manager, which will handle multiple version of Ruby. From here my search starts!!

After searching a lot on Google, and suggested by one of my friend, I found ‘pik‘.
Short Intro about PikPik is a version manager for Ruby. You can handle/install multiple versions of Ruby and switch between them easily.

Basic Requirement: You must have atleast one version of Ruby, up and running on Windows.

Installation: ‘pik’ comes as a gem. To install pik, follow these steps:

Dependencies:
> my current plateform: ruby-1.8.6. From the command prompt, type:
gem install pik
> After the successful installation of pik, type:
pik_install C:\tools
> Add this to your Path Environmental variables
My Computer > Right Click > Properties > Advanced System Settings > Environmental Variables > Path

Once you’re done. Open a new command prompt and type:
pik list
It will add the current version of ruby into the list.
Now what’s so special about pik? How it can handle the multiple versions? To see that in action, in command prompt, type:
pik install ruby 1.8.7
and this will start downloading and once downloaded it will install 1.8.7, under:
C:\Users\PC-name\.pik\rubies\Ruby-187-p302

Awesome!! isn’t it?
pik list
It will show you the current version of ruby and the other ones.
pik use 187
Will use now ruby-187. Don’t believe me? :-x Then type:
ruby -v

I am super excited now :-D I want to install Ruby-1.9.2 now. Afraid? Still hesitate? Don’t be, just follow the instructions…
From the command window, type:
pik install ruby 1.9.2
Heights of happiness… It is installing 1.9.2 now!!
Path will remain the same, i.e:
C:\Users\PC-Name\.pik\rubies\Ruby-192p302

Do a pik list now and you’ll see:
<image comes here />

Now, I am running multiple versions of Ruby on my Windows m/c and I can select any version by:
pik use 187
gem install rails --include-dependencies
rails s -p 4000

and can perform numerous operations… Yuppy!!!!

Here comes the another pain. Few days back I thought to work with Rhodes. The Mobile Framework for Ruby.

To install it, I went through the Rhodes website and followed the tutorials. I did:
pik use 187
gem install rhodes

I got make error :-x Why windows won’t work like the Linux does and why do we need to troubleshootC-compiler problems?

Another day I spent to look around for a solution and finally came up with Devkit.

Short Intro about Devkit: Devkit is a windows executable program, which creates native extensions for your Ruby gems, which uses C-complier.

Installation: Download the Devkit (Development Kit) from Ruby installer website. After downloading, extract it to:
C:\devkit
After extraction, open your command, go inside C:\devkit prompt and type:
ruby dk.rb init
This will create the config.yml inside C:/devkit. Now you need to define all the Ruby versions inside that file, so that devkit will create native extensions for them. To do that, open that file and at the end of it, write these lines:

- C:\ruby
- C:\Users\PC-name\.pik\rubies\Ruby-187-p330
- C:\Users\PC-name\.pik\rubies\Ruby-192-p0

Once done save it and from the command prompt, type:
ruby dk.rb install
and you should see something like this:

Awesome, easy steps, isn’t it? Now, what else you’re looking for? Go ahead, install any gem for any version of ruby without any hesitations :-)

Please let me know if you’re stuck or need any help. Good comments will always motivate me to write more and more and help the Ruby Community keep growing.

References taken from:

JQUERY ON RAILS3 AUTO SELECT

In earlier post of mine, we have seen, how to implement “Auto Select”, with the help of Prototype and Rails.

Now, that Rails-3 has been released, lot of changes are already made. In-built support for Prototype has been removed. Still if you wish to use prototype, all you need is to install its gem.

Here, I am covering the same example:

– Select ‘Country’ from the first drop down.
– Second drop down will populate the list of ‘States’. If you select any state:
– Third drop down will populate the list of ‘Countries’.

All I am using here is Rails-3, Rails-3 UJS, and Jquery.

I would also like to thank Ryan Bates, for the railscasts he provided to implement this using unobtrusive javascript.

Please download the application with the link provided and let me know your feedback.

System Requirements/Features Covered in this application.
– Ruby 1.8.7
– Rails 3.0.0 or higher
– Country -> State -> City Drop down
– Ajax Search

Steps to run the application:
– Create a schema. Change the database.yml accordingly.
– Run rake db:migrate
– Start the server.
– Please do read the README file.

jquery-autoselect

A JOURNEY FROM RUBY ON RAILS TO IPAD DEVELOPMENT

Hello Everyone,

Since last couple of months, I was very busy in travelling, looking after my family, managing lot of other things. That’s why I didn’t get a chance to update my Blog.

One interesting thing, which happened 1 month back, is somehow, I got an opportunity to work with iPad Application. At first I thought, I am into RoR development since last 3 years, so why should I learn this new technology? What’s the future of it? Where I will be after 2 years down the line?

And surprisingly, I got an offer to work with both the technologies (i.e Ruby on Rails as well as iPad). Looks overload, isn’t it? Not at all :)

I admit the fact, that I am bit out of touch with the recent updates happening in Ruby on Rails community, because of the new iPad project, but I am hoping to get myself back into this very soon. But my existing knowledge into RoR, is helping my and my team, to accelerate the development speed.

In this post, I would like to tell you about the background of iPad development, Obejctive-C and Sqlite3 database.

This is not an in-depth technical article, but It will certainly help those developers, who are shifting their technologies or would like to try iPad/iPhone development.

To start with Basic development, all you need is:

  • The basic/advanced knowledge of Objective-C, which you’ll find it easy to learn at first go, but way to difficult when it comes to actual implementation. So be very focused while learning.
  • An Apple Machine. Macbook/Mac Mini would be good to go.
  • Xcode – A development tool for building iPad/iPhone App. Its free and you’ll get it from iTunes.
  • Sqlite3 – All applications running on iPad/iPhone are using Sqlite3 as a Data Storage device. So, If you’re thinking of using MySQL or Oracle or any database of your choice, the answer is ‘NO’. It comes by default with Xcode.
  • iPad Device: To test your application and see how it actually runs on iPad. To start with you can also see your application on Simulator.
  • On top of all this, you must have an Apple account. Charges to create your account is 1$.