nirasan's tech blog

趣味や仕事の覚え書きです。Linux, Perl, PHP, Ruby, Javascript, Android, Cocos2d-x, Unity などに興味があります。

Railsの基本操作まとめ

動作環境

プロジェクトの作成

rails new Project

サーバー起動

cd Project
rails server

Javascriptランタイムがないエラー

echo "gem 'therubyracer'" >> Gemfile
bundle install

モデルの作成

rails g model user username:string password:string score:integer
rake db:migrate

モデルの動作確認

rails console
irb> User.all
irb> User.create(:username => "foo", :password => "bar", :score => 100)
irb> User.find(1)
irb> User.all.each { |u| u.delete }

コントローラの作成

rails g controller user show add

ルーティングの設定

vi config/routes.rb

コントローラの処理記述

vi app/controllers/user_controller.rb
def show
  # パラメータの取得とモデルの参照
  @user = User.find_by_username_and_password(params[:username], params[:password])
  # レコードの有無判定
  if @user.present?
    # レコード情報をJSONにして返却
    render :json => @user
  else
    # ステータスコード404で空のレスポンス
    head :not_found
  end
end

def add
  # レコード作成準備
  @user = User.new(:username => params[:username], :password => params[:password])
  # レコード作成できるかどうか
  if @user.save
    # 成功ならステータスコード200
    head :ok
  else
    # 失敗ならステータスコード400
    head :bad_request
  end
end

モデルのバリデーション設定

vi app/model/user.rb
class User < ActiveRecord::Base
  validates :username,  # :usernameカラムのバリデーション設定
    :presence => true,  # 入力必須
    :uniqueness => true # 重複なし
end

モデルにプロパティの追加

  • Userモデルにlifeプロパティを追加
% rails g migration AddLifeToUsers life:integer
      invoke  active_record
      create    db/migrate/20121214000615_add_life_to_users.rb

% cat db/migrate/20121214000615_add_life_to_users.rb
class AddLifeToUsers < ActiveRecord::Migration
  def change
    add_column :users, :life, :integer
  end
end

% rake db:migrate
==  AddLifeToUsers: migrating =================================================
-- add_column(:users, :life, :integer)
   -> 0.0009s
==  AddLifeToUsers: migrated (0.0010s) ========================================

% vi app/models/user.rb #attr_accessible に :life の追記