初めてのruby開発 - 登録・詳細表示開発編
前回は、便利なコマンドの紹介や、テストデータを一覧表示してきました。
本当に簡単に触った程度ですね。
今回は、前回作成した入力画面を拡張して、エラーチェック、確認画面の構築、登録実行を行い、
登録した詳細情報(ページ)の取得までを行いたいと思います。
目次を作成しました!以下のページへ!
初めてのruby開発 - 目次 - Program LOG
参考にしたサイト
#06 rails db/rails consoleを使おう | Ruby on Rails 4入門 - プログラミングならドットインストール
Railsドキュメント
Railsで確認画面の基本 - 篳篥日記
確認画面の作成
まずは、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と比べて比較的短く記述できるのがすごい便利です!
次回は、編集と削除を行いたいと思います。
使用環境
- ホストOS: Windows7 x64
- VirtualBox: 4.3.10
- Vagrant: 1.5.2
- ゲストOS: CentOS6.4 x64
- Ruby : 2.0.0-p451
- Ruby on Rails : 4.1.0
- passenger : 4.0.41
- apache : 2.2.15
- NetBeans IDE 8.0