Tuesday, 7 February 2012

Ajax in Rails

Hi friends i used ajax in my application and i have got successful result.... I want share that what i have learnt.......
Render the table when you add a new record into your database without reloading your whole page......
I post simple example to render the index file when i trying to add a new record ....
Consider the table name is profession....
1 => Create an application
* rails new sampleapplication

2 => Create a model
* rails g model Employee empname:string age:integer gender:boolean
3 => Create a controller Employees
*rails g controller Employees

4 => *rake db:create

5 => *rake db:migrate

6 => If you want to add any validation you can set validates in your model, for Example
class Employee < ActiveRecord::Base
validates :empname, :age, :gender, :presence=>:true
end

7 => In your controller you can write the code as below like this
class EmployeesController < ApplicationController

def new
@employee=Employee.all
end

def create
@employee.create(params[:employee])
flash[:notice]="Record has been created"
@employee=Employee.all
redirect_to employees_path
end

def index
@employee=Employee.all
end

def show
@employee = Employee.find(params[:id])
end
def edit
@employee = Employee.find(params[:id])
end
def update
@employee = Employee.find(params[:id])
@employee.update_attributes(params[:employee])
flash[:notice]="Record has been updated"
redirect_to new_employee_path
end

def destroy
@employee = Employee.find(params[:id])
@employee.destroy
flash[:notice]="Record has been deleted"
redirect_to new_employee_path
end
end

8 => Set your routes file
sampleapplication::Application.routes.draw do
resources :employees
end

9 => In your views folder you should create view files for new, edit , show and create one partial file called index
* new.html.erb
<%= form_for @employee,:remote=>true,:url=> {:controller=> :employees, :action=>:create} do |emp|%>
Employee name:<%= emp.text_field :empname%>

Age: <%= emp.text_field :age%>

Gender: <%= emp.radio_button "gender", "m"%> Male
<%= emp.radio_button "gender", "f"%> Female

<%end%>
* show.html.erb

Employee Details
Employee: <%=@employee.empname%>
Age: <%=@employee.age%>
<%if @employee.gender == m %>
Gender: Male
<%else%>
Gender: Female
<%end%>

<%= link_to 'Back', new_employees_path %>

* edit.html.erb
<%= form_for @employee} do |emp|%>
Employee name:<%= emp.text_field :empname%>

Age: <%= emp.text_field :age%>

Gender: <%= emp.radio_button "gender", "m"%> Male
<%= emp.radio_button "gender", "f"%> Female

<%end%>

*index.html.erb

List of Employees


Create like table format

Employee Name
Age
Gender
Actions
<% @employee.each do |employee| %>
<%=employee.empname%>
<%=employee.age%>
<%@t=employee.gender%>
<% if @t== m %>
Male
<%else%>
Female
<%end%>
<% end %>

<%= link_to 'Show', employee %>
<%= link_to 'Edit', edit_employee_path(employee) %>
<%= link_to 'Destroy', employee, :confirm => 'Are you sure?', :method => :delete %>


10 => Create one js in views folder

* create.js.erb

$("#employee").html("<%= escape_javascript(render(:partial =>"index",:locals=>{:employee=>@employee})) %>");

11 => Start your server its working well
* rails s