Ruby Rail First Step

From Objectif Client Inc
Revision as of 00:26, 15 November 2014 by Nicolas Rollin (talk | contribs)
Jump to navigation Jump to search
  • Your first application with MySQL

Create the Application

rails new firstapp -d mysql
  1. Move into the application directory
cd firstapp
  1. If you setup MySQL or Postgres with a username/password, modify the
  2. config/database.yml file to contain the username/password that you specified
  1. Create the database
rake db:create
  1. Start the server
rails server
  1. Visite the web site

http://localhost:3000

  1. change the default page

Add the following into config/routes.rb

root :to => "home#index"

Start to Work with Resources

Generate a resource (Post)

rails generate scaffold Post name:string title:string content:text

Creating and Customizing Rails Generators & Templates

Create Tables (posts)

rake db:migrate
  • To create in production
rake db:migrate RAILS_ENV=production.

Add a link into the home page

  • Add Post Page in the index file app/view/home/index.html.erb
<%= link_to "My Blog", posts_path %> 

Add validation

  • Add validation into app/modles/post.rb
class Post < ActiveRecord::Base
  validates :name,  :presence => true
  validates :title, :presence => true,
                    :length => { :minimum => 5 }
end

Create an Xml List

  • Modify the sectioni def index of the file app/controllers/posts_controller.rb
def index
  @posts = Post.all
 
  respond_to do |format|
    format.html # index.html.erb
    format.xml  { render :xml => @posts }
  end
end

Creation Process

New Post Request

  • the form is empty but has the same feild a the one used for modification
  • Inside the file app/controllers/posts_controller.rb
  def new
    @post = Post.new
  end

Empty Form

  • app/view/new.html.erb
<h1>New post</h1>
<%= render 'form' %>
<%= link_to 'Back', posts_path %>
  • render 'form' is a partials. A code which can be reused

Form

  • app/views/posts/_form.html.erb
<%= form_for(@post) do |f| %>
  <% if @post.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>

      <ul>
      <% @post.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :title %><br>
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :content %><br>
    <%= f.text_area :content %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
  • form_for is used to create an html form
  • form_for is knows the current transaction is an add or an update
  • If you are using field not attached to a model you must use form_tag.

Create Post

  • Inside the file app/controllers/posts_controller.rb
def create
  @post = Post.new(params[:post])
 
  respond_to do |format|
    if @post.save
      format.html { redirect_to(@post,
                    :notice => 'Post was successfully created.') }
      format.xml  { render :xml => @post,
                    :status => :created, :location => @post }
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @post.errors,
                    :status => :unprocessable_entity }
    end
  end
end