Program LOG

勉強した内容をまとめ中。。。間違ってたら教えて。。。

初めてのruby開発 - 登録・詳細表示開発編

前回は、便利なコマンドの紹介や、テストデータを一覧表示してきました。
本当に簡単に触った程度ですね。
今回は、前回作成した入力画面を拡張して、エラーチェック、確認画面の構築、登録実行を行い、
登録した詳細情報(ページ)の取得までを行いたいと思います。

目次を作成しました!以下のページへ!
初めてのruby開発 - 目次 - Program LOG

確認画面の作成

まずは、bbs_controller.rbファイルを編集し、以下のように追記しました。

  # 確認画面
  def create_confirm
    session[:create] = bbs_params
    @bbsitem = Bbs.new session[:create]
  end
  #POSTデータの受取
  private 
    def bbs_params
      params[:bbs].permit(:title,:body,:username,:deletepwd)
    end

create_confirmメソッドを作成し、POSTで受け取ったデータをsessionに挿入し、その後、「Bbs」modelをnewしています。
本来は無駄にsessionを使用しないのですが、POSTでの持ちまわしよりも分かりやすかったので、
sessionにで作成してしまおうと思います。
次に「app/views/bbs/」の中に「create_confirm.html.erb」ファイルを作成し、以下のように書き込みました。

<%= form_for @bbsitem, :url => {:action => "create_complete"} do |f| %>
<table>
  <tr>
    <td>タイトル</td>
    <td><%= @bbsitem.title  %></td>
  </tr>
  <tr>
    <td>投稿者</td>
    <td><%= @bbsitem.username  %></td>
  </tr>
  <tr>
    <td>本文</td>
    <td><%= @bbsitem.body  %>
    <%= h @bbsitem.body %>
    </td>
  </tr>
  <tr>
    <td>削除パスワード</td>
    <td><%= @bbsitem.deletepwd  %></td>
  </tr>
</table>
<%= link_to '戻る', bbs_create_path %>
<%= f.submit:登録実行 %>
<% end %>

戻るリンクを設置し、フォームで「create_complete」ページへ遷移するように作成しました。

登録処理の作成

それでは実際に登録処理を作成していきます。
登録完了後に完了しました的なページを表示したいと思います。

  # 保存実行
  def create_complete
    #値の追加
    session[:create].store("resid",0)
    @bbsitem = Bbs.new(session[:create])
    if @bbsitem.save
      session[:create] = nil
    else
      render :action => :create
    end
  end

create_completeメソッドを作成し、sessionの値を用いて「Bbs」modelをnewしています。
また、その後「Bbs」modelをセーブし、正常に行われた場合は、sessionをクリアしました。
また、正常終了できなかった場合は、再度「create」をレンダリングしています。

バリデーションの作成

先ほどは正常に登録が出来ましたが、未記入でも登録する事が出来てしまいます。
そこでバリデーション、つまりエラーチェックを行うようにしたいと思います。
まずはモデルから修正していきます。

class Bbs < ActiveRecord::Base
  validates :title, presence: { message: "タイトルは必須です"}
  validates :username, presence: { message: "ユーザー名は必須です"}
  validates :body, presence: { message: "本文は必須です"}
  validates :deletepwd, presence: { message: "削除キーは必須です"}
end

次に、コントローラーの修正を行います。
まずは、「create_confirm」メソッドから修正します。

  def create_confirm
    session[:create] = bbs_params
    @bbsitem = Bbs.new session[:create]
    render :action => :create unless(@bbsitem.valid?) ←追記
  end

上記条件は、エラーがある場合は、createメソッドをレンダリングするというものです。
最後に、ビューに、エラーがある場合には、エラーメッセージを表示します。

<%= form_for @bbsitem, :url => {:action => "create_confirm"} do |f| %>
<table>
  <tr>
    <td>タイトル</td>
    <td>
      <% if @bbsitem.errors.messages[:title] %>
      <%= @bbsitem.errors.messages[:title][0] %>
      <% end %>
      <%= f.text_field :title  %>
    </td>
  </tr>
  <tr>
    <td>投稿者</td>
    <td>
      <% if @bbsitem.errors.messages[:username] %>
      <%= @bbsitem.errors.messages[:username][0] %>
      <% end %>
      <%= f.text_field :username  %>
    </td>
  </tr>
  <tr>
    <td>本文</td>
    <td>
      <% if @bbsitem.errors.messages[:body] %>
      <%= @bbsitem.errors.messages[:body][0] %>
      <% end %>
      <%= f.text_area :body  %>
    </td>
  </tr>
  <tr>
    <td>削除パスワード</td>
    <td>
      <% if @bbsitem.errors.messages[:deletepwd] %>
      <%= @bbsitem.errors.messages[:deletepwd][0] %>
      <% end %>
      <%= f.password_field :deletepwd  %>
    </td>
  </tr>
</table>
<%= f.submit:登録 %>
<% end %>

以上でバリデーションが行えます。
本当はセキュリティのことを考えたり、いろんな事を想定した作成方法があるみたいなのですが、
ひとまず何も考慮せずにやりたい事だけやってみました。
さて、次は、詳細情報を取得したいと思います。

詳細ページの作成

詳細ページを作成していきたいと思います。
コントローラーへ以下のように追記しました。

  #詳細ページ
  def show
    @bbsitem = Bbs.find(params[:id])
  end

findメソッドは、データベースからデータを検索してくれます。
また、ビューを作成し、以下のようにコーディングします。

<table>
  <tr>
    <td>タイトル</td>
    <td><%= @bbsitem.title  %></td>
  </tr>
  <tr>
    <td>投稿者</td>
    <td><%= @bbsitem.username  %></td>
  </tr>
  <tr>
    <td>本文</td>
    <td><%= @bbsitem.body  %>
    </td>
  </tr>
</table>

以上で完了となります。
詳細データの取得方法は非常に簡単です。
というか、PHPと比べて比較的短く記述できるのがすごい便利です!
次回は、編集と削除を行いたいと思います。

使用環境