Skip to main content

Rails Migration Difference between Text and String

Rails Migration Difference between Text and String ?

While working with Rails Migration Difference between Text and String is important to be known to every developer. Columns and their data types are finalized while deciding Table structure.

This tutorial will help understand difference between String and Text column type and illustrate how to write Rails Migration implementing the same. You might want to read about database.yml files for specifying database configuration for Rails Application.
1. Concepts
When String or Text data type is required?

    Whenever you require your column to store information which is lengthy in size (Many characters), you need to consider String or Text data type for the column.
    Both of them let you store Many(How Many - will see later) characters

Difference between String and Text

Considering MySQL database
Feature     String     Text
Length     1 to 255     1 to 4294967296
Default     65536     255
2. Inference
When to use String for column type?

Column type should be used as String when you want to store characters with length fairly minimum unto 255.
When to use Text for column type?

Column type should be used as String when you want to store much more characters (No Limit - not literally) e.g. if you want to store description, content of some post etc. then you may want to consider Text as a column type for the same.
3. Rails Migration

Let us create a sample table 'posts' having following fields

    id
    title
    description
    content
    author_id

Then in Rails, we can write migration as follows,

class CreatePosts < ActiveRecord::Migration

   def self.up
      create_table :posts do |t|
         t.string  :title # will get 255 limit as it is default limit
         t.string  :description # will get 255 limit as it is default limit
         t.text    :content # will get 65535 limit as it is default limit
         t.integer :author_id,
         t.timestamps
      end
   end

   def self.down
      drop_table :posts
   end
end

Above migration when run will create posts table with given column types.
Custom Length limit to column type:

We can set limit to the character length of particular column type using limit as follows,

t.string    :description, :limit => 50

Then it will set character limit for the ‘description’ column to 50 and it will not allow to enter information having length more than 50 characters for that column.

Comments

Popular posts from this blog

Gem::LoadError (Specified 'mysql2' for database adapter, but the gem is not loaded. Add `gem 'mysql2'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).?

Gem::LoadError (Specified 'mysql2' for database adapter, but the gem is not loaded. Add `gem 'mysql2'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).) In rails?


1)change the gemfile in mysql version
 gem 'mysql2'

2)Change to mysql2 version
 gem 'mysql2','0.3.20'

Active Scaffold : Add radio buttons to your form ruby on rails ?

Active Scaffold : Add radio buttons to your form ruby on rails ?

The way to add radio buttons to your active scaffold create/update from is as shown below

#Controller

class UsersController < ApplicationController
active_scaffold :user do |config|
config.label = “Users”
config.columns = [:name, :gender]
config.columns[:gender].form_ui = :radio
config.columns[:gender].options[:options] = [['Male', '1'], ['Female','2']]
end
end

Get the Current url in ruby on rails

request.refererrequest.fullpathrequest.fullpath.split("?")[0]request.referer or request.env['HTTP_REFERER'] your controller to get the referer url. 

--------------------
request.original_url
request.url
request.host_with_port
<link rel="canonical" href="<%= request.url %>" />
<%=request.path%>
How can I get the current absolute URL in my Ruby on Rails view?
The request.request_uri only returns the relative URL.
request.env['REQUEST_URI']

 For Rails 3.2 or Rails 4 you should use request.original_url to get the current URL. More detail.

For Rails 3: You want "#{request.protocol}#{request.host_with_port}#{request.fullpath}", since request.url is now deprecated.

For Rails 2: You want request.url instead of request.request_uri. This combines the protocol (usually http://) with the host, and request_uri to give you the full address