【Ruby on Rails】ルーティング、マイグレーション云々【学習記録1】

最近ようやく少しずつRailsに乗りこなせるになってきたので、ちょっと整理がてらリソースベースのルーティングやらマイグレーションやらの整理をしてみる。

つくるもの

シードデータやらルーティングやらマイグレーションやらいじりつつブログ記事っぽい感じで DBからの簡単な読み出し。それだけ。「Scaffoldでやれば」って話だけど、根幹の仕組みは知っておきたいので。

データの用意

何はともあれmodelの作成。コンソール上で以下のコマンド。


rails g model article

マイグレーション用のスクリプトができたはずなので、db/migrate に移動し スクリプトを編集。


class CreateArticles < ActiveRecord::Migration
  def change
    create_table :articles do |t|
      t.text :title
      t.text :body
      t.date :created_at
      t.date :expired_at
      t.boolean :is_public
      t.timestamps
    end
  end
end

マイグレーションの実行。


rake db:migrate

一個一個データぶっ込むのも面倒なので、シードデータをつくる。


k = ["猫","えんぴつ","麦茶","ホットコーヒー","アルコール","パソコン","IT系クラスタ"]
m = ["不自然な挙動","王子様","バグ","酸化","勉強会"]

10.times do
  Article.create(
    title: k[rand(k.length)] + "の" + m[rand(m.length)] + "に関する考察",
    body: "いくらシードデータだからとはいえ変なものばっかり載せるわけにもいかんだろうし>、ちょっとここらでLorem ipsum dolor sit amet でもしますか。",
    created_at: 1.day.ago,
    expired_at: 10.days.from_now,
  )
end

こんな感じでタイトルは二個の配列からランダムに要素を取ってきて組み合わせてつくる感じにした。本文は適当。というわけでシードデータをぶっ込む。


rake db:seed

“Can’t mass-assign protected attributes: title, body, created_at, expired_at” と言われて拒否られる。そういえばmodelの方にattr_accessible書き忘れてた。というわけで、app/models/articles.rb のクラス内に以下のスクリプトを挿入。


attr_accessible :title, :body, :created_at, :expired_at

再び上記のコマンドでシードデータをぶっ込む。よし、通った。

因みにここら辺は db:seed の代わりに db:reset を使ってあげても良い。

ルーティング 及び コントローラの作成

まずはコントローラをつくる。コンソール上で以下のコマンドを実行。


rails g controller article

コントローラができた。app/controllers/article.rb を以下のように記述。今回はRESTfulな感じでリソースベースのルーティングをするので 7つのactionを用意。今回の記事に関しては とりあえず index と show だけやることにする。


class ArticlesController < ApplicationController

  def index
    @articles = Article.order
  end

  def show
    @article = Article.find(params[:id])
  end

  def edit
  end

  def destroy
  end

  def new
  end

  def update
  end

  def create
  end

end

同時にconfig/routes.rbに以下の記述を追加。


resources :articles do
end

これで7つのアクションに対応した。

Viewの作成

コンソールでコントローラ生成した時に viewファイル用のフォルダもできてるので、app/views/articles/ に移動して index.html.erb と show.html.erb の作成。

index.html.erb


<% @page_title = "ARTICLES" %>

<h2><%= @page_title %></h2>

<% @articles.each do |article| %>

<h3><%= link_to article.title, article %> <%= article.created_at.strftime("(%Y.%m.%d)") %></h3>
<p><%= article.body %></p>

<% end %>

<%= link_to "戻る", :root %>

show.html.erb


<% @page_title = @article.title %>

<h2><%= @article.title + @article.created_at.strftime(" (%Y.%m.%d)") %></h2>
<p><%= @article.body %></p>
<p><%= link_to "戻る", :articles %></p>

こんな感じで(因みにテンプレートファイルに関しては別途 app/views/layouts/application.html.erb に記述してある)。

indexのViewはこんな感じに仕上がった。

articlesview

うーん、タイトルがひどい。何はともあれうまくデータ引っ張ってきてるから良しとする。

showの方はこんな感じ。

スクリーンショット 2013-10-15 18.08.40

URIも /articles/5 みたいな感じで シンプルでいいね。

という感じで学習の振り返りしてみました。最初のうちは色々概念が登場しまくって頭がこんがらがりそうでしたが、何度か写経したりエラーと奮闘しているうちに ようやくRailsのスタートラインって感じ。

とはいえ、まだまだ扱いこなせていないので、もう少し勉強して 改めてこの場で報告させていただくことにします。

Written by Nisei Kimura ( 木村 仁星 )

- Sponsored Links -

<<

Top

>>