Ruby Rail First Step: Difference between revisions
Jump to navigation
Jump to search
(→Form) |
|||
(One intermediate revision by the same user not shown) | |||
Line 42: | Line 42: | ||
===Add validation=== | ===Add validation=== | ||
*Add validation into app/modles/post.rb | *Add validation into app/modles/post.rb | ||
< | <syntaxhighlight lang="ruby"> | ||
class Post < ActiveRecord::Base | |||
validates :name, :presence => true | validates :name, :presence => true | ||
validates :title, :presence => true, | validates :title, :presence => true, | ||
:length => { :minimum => 5 } | :length => { :minimum => 5 } | ||
end | end | ||
</ | </syntaxhighlight> | ||
===Create an Xml List=== | ===Create an Xml List=== | ||
* Modify the sectioni def index of the file app/controllers/posts_controller.rb | * Modify the sectioni def index of the file app/controllers/posts_controller.rb | ||
Line 81: | Line 83: | ||
===Form === | ===Form === | ||
* app/views/posts/_form.html.erb | * app/views/posts/_form.html.erb | ||
< | <syntaxhighlight lang="ruby"> | ||
<%= form_for(@post) do |f| %> | <%= form_for(@post) do |f| %> | ||
<% if @post.errors.any? %> | <% if @post.errors.any? %> | ||
Line 111: | Line 113: | ||
</div> | </div> | ||
<% end %> | <% end %> | ||
</ | </syntaxhighlight> | ||
* [http://www.railsdebutant.org/fr_guides/layouts_and_rendering.html#using-partials Layouts and Rendering in Rails] | * [http://www.railsdebutant.org/fr_guides/layouts_and_rendering.html#using-partials Layouts and Rendering in Rails] |
Latest revision as of 17:21, 15 November 2014
- Your first application with MySQL
Create the Application
rails new firstapp -d mysql
- Move into the application directory
cd firstapp
- If you setup MySQL or Postgres with a username/password, modify the
- config/database.yml file to contain the username/password that you specified
- Create the database
rake db:create
- Start the server
rails server
- Visite the web site
- change the default page
Add the following into config/routes.rb
root :to => "home#index"
Start to Work with Model
Generate the first Model (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
- Now try http://localhost:3000/posts.xml
- More information at Active Record Query Interface
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
Add a second Model linked with the first one
- Instead of using the scaffolding we are proceding peice by peice
- Generate Model
rails generate model Comment commenter:string body:text post:references
- Rail has generated the Model: the file app/models/comment.rb
class Comment < ActiveRecord::Base belongs_to :post end
- Rail has generated the migration
rake db:migrate
Add Relation to Post
- Modify post.rb
- add association "has_many"
class Post < ActiveRecord::Base validates :name, :presence => true validates :title, :presence => true, :length => { :minimum => 5 } has_many :comments end
Add a route
- Modify route file config/routes.rb
resources :posts do resources :comments end
Rails Routing from the Outside In
Add a controller
rails generate controller Comments