Railsで掲示板っぽいものを作ってみる

CentOSにRuby2.1とRails4.1をインストールしてみる
の続き

Rails掲示板っぽいものを作ってみる。

アプリケーションの作成

Railsアプリケーションを作成する。

$ rails new sample
$ cd sample

いつものごとく、therubyracerのコメントを外す。

$ vi Gemfile
gem 'therubyracer'	←コメントを外す
$ bundle install

データベースの作成

データベースを作成する。

$ rake db:create

モデルの作成

モデルを作成し、データベースに反映する。

$ rails generate model message title:string body:text
$ rake db:migrate

タイトルと本文の入力を必須とし、最大文字数を設定する。
また、逆順にソートして取得するメソッドも定義しておく。

$ vi app/models/message.rb
class Message < ActiveRecord::Base
  validates :title, :presence => true, :length => { :maximum => 10 }
  validates :body, :presence => true, :length => { :maximum => 100 }

  def self.message_list
    return Message.all.order(:created_at => :desc)
  end
end

コントローラの作成

コントローラを作成する。

$ rails generate controller messages

表示用のメソッドと書き込み用のメソッドを作成する。

$ vi app/controllers/messages_controller.rb
class MessagesController < ApplicationController

  # 表示
  def index
    @messages = Message.message_list
    @message = Message.new
  end

  # 書き込み
  def create
    @message = Message.new(params.require(:message).permit(:title, :body))
    if @message.save
      redirect_to :action => :index
    else
      @messages = Message.message_list
      render :index
    end
  end

end

ルートも設定しておく。

$ vi config/routes.rb
Sample::Application.routes.draw do
  ・・・
  # root 'welcome#index'
  root 'messages#index'
  resources(:messages)
  ・・・
end

ビューの作成

ビューを作成する。

$ vi app/views/messages/index.html.erb
<h1>掲示板</h1>

<%= form_for(@message) do |f| %>
  <% if @message.errors.any? %>
    <% @message.errors.full_messages.each do |err| %>
      <font color="red"><%= err %></font><br>
    <% end %>
  <% end %>

  <div><%= f.text_field :title %></div>
  <div><%= f.text_area :body %></div>
  <%= f.submit %><br>
<% end %>
<hr>

<% @messages.each do |msg| %>
  <%= msg.id %> : <%= msg.title %> : <%= msg.created_at %><br>
  <pre><%= msg.body %></pre>
  <br>
<% end %>

確認

起動する。

$ rails server

http://サーバーのアドレス:3000/
にアクセスすると、掲示板っぽいものが表示される。


入力してボタンを押すと、

投稿される。


文字数が長すぎたり、未入力があると、

エラーになる。