railsメモ

rails

静的コンテンツの表示

(アプリケーションのルート)/publicフォルダに入っているものは静的コンテンツとして扱われ、http://localhost:3000/start.htmlのようにアプリケーションのルートパスからアクセスできる

コントローラの生成

rails generate controller {コントローラー名}

でコントローラー生成

以下のようなクラスが出来上がる

class BooklistController < ApplicationController
end

アクションの生成

コントローラークラスの中にメソッドを作成する

render :text => 'hello'はApplicationControllerのrenderメソッドに{:text=>’hello’}なハッシュをキーワード引数として渡している
詳しくはこの記事

class BooklistController < ApplicationController

  def hello
    render :text => 'Hello!'
  end

  def bye
    render :text => 'bye!'
  end

end

ルーティングの設定

config/routes.rbを編集する

Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

http://guides.rubyonrails.org/routing.htmlを見ればルーティングの設定例が書かれているが簡単なものを出すとこんな感じ

Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  match 'hello',:to => 'application#hello',:via=>:get
  match 'bye', :to => 'application#bye',:via=>:get
end

ビューへの受け渡し

.html.erbファイル(ビューテンプレート)をviewsフォルダに作成する。
viewsフォルダの中に{controller名}/{action名}.html.erbのディレクトリ構造で入れるととてもよい
中身はとりあえずこんな感じ

<h1>Hello</h1>
<p>
  <%= @msg %>
</p>
class ApplicationController < ActionController::Base
  protect_from_forgery

  # 何もrenderしないと対応する{controller}/{action}.html.erbが使用される
  # @msgみたいな感じでメンバ変数に値を入れると<%= @msg %>みたいに変数を参照できる
  def hello
    @msg = :はろー
  end
  # renderメソッドの引数にviewsフォルダからのパスを指定してもよい
  def bye
    render "application/bye"

  end
end

DBの作成

以下のコマンドでDB作成

rake db:create

dbフォルダ内に以下の3つのファイルができる

  • development.dqlite3(開発用db)
  • test.sqlite3(テスト用db)
  • seeds.rb(初期値挿入用スクリプト)

モデルの生成

以下のコマンドでモデル生成

rails generate model {モデル名} {フィールド名1}:{データ型1} ...

とりあえずフィールドなしでモデル作成

rails generate model title

マイグレーション

db/migrateフォルダの中にマイグレーションファイルができている(DB生成時)
この中を編集してDBのカラムをマイグレーションする

class CreateTitles < ActiveRecord::Migration[5.0]
  def change
    create_table :titles do |t|
      # 追加
      t.string :name
      t.date :sales_date
      # ここまで
      t.timestamps
    end
  end
end

マイグレーションファイルを編集したら以下のコマンドでマイグレーション

rake db:migrate

テストデータの生成

ssed.rbファイルを編集してテストデータをいれる

Title.create(:name=>'ほげ',:sales_date=>'2017-03-21')

以下のコマンドで初期値挿入

rake db:seed

モデルへのアクセス

生成されたモデルクラスを利用してコントローラーからアクセスする

class ApplicationController < ActionController::Base
  protect_from_forgery

  def hello
    @titles = Title.all
  end

  def bye
    render :text => 'bye!'

  end
end
<h1>Hello</h1>
<p>
  <% @titles.each do |title| %>
    <p>タイトル:<%= title.name %> 発売日:<%= title.sales_date %></p>
  <% end %>
</p>

json、xmlの返却

renderメソッドのjsonオプションにオブジェクトをいれる

class ApplicationController < ActionController::Base
  protect_from_forgery

  def hello
    data = {:hoge1=>:moge1,:hoge2=>:moge2}
    render :json => data
  end
end

xmlでも同様

class ApplicationController < ActionController::Base
  protect_from_forgery

  def hello
    data = {:hoge1=>:moge1,:hoge2=>:moge2}
    render :xml => data
  end
end

パラメータの取得

paramsメンバー(ハッシュ)に入っている

こんな感じhttp://localhost:3000/hello?hoge=mogeでアクセスが起こった場合
こんな感じでクエリパラメータを取得できる

class ApplicationController < ActionController::Base
  protect_from_forgery

  def hello
    @hoge = params[:hoge]
  end
end

POSTでも同様

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください