編集画面を日本語化
app/views/memo/edit.rhtml
- 「render :partial」は、_form.html から読み込まれる。
- newのプログラムの際に編集済みなので、「表題:」「本文」などは表示される。
- 同じようなHTMLを何度も繰り返して書く必要がなくなる。
-
変更後の edit.rhtml
<H2 ALIGN="center">「<%=h @memo.title %>」を編集</H2> <CENTER> <% form_tag :action => 'update', :id => @memo do %> <%= render :partial => 'form' %> <%= submit_tag '更新する' %> <% end %> <%= link_to 'リストへ戻る', :action => 'list' %> </CENTER>
-
日本語化された編集画面
memo_controller.rb のupdateメソッドを変更
def update @memo = Memo.find(params[:id]) // paramsハッシュ・テーブル if @memo.update_attributes(params[:memo]) // update_attributesメソッド # flash[:notice] = 'Memo was successfully updated.' flash[:notice] = "「#{ERB::Util.h(@memo.title)}」を保存しました" # redirect_to :action => 'show', :id => @memo redirect_to :action => 'edit', :id => @memo // showからeditへ else render :action => 'edit' end end
-
編集画面の「更新」クリックで、paramsハッシュ・テーブルに、開いているメモに関する情報が代入される。
- メモid番号は、params[:id]。インデックス。シーケンス値
- 書き込んだメモデータは、params[:memo]
- id番号を引数にして、findメソッドを実行
- Momoモデルによって、SQL文「select * from memos where id=params[:id]」に変換され、memosテーブルから全カラムを取り出し、それを、@memo インスタンスへ代入
- update_attributesメソッドを実行し、@memo を渡されたデータで更新する。SQLのUPDATE文に変換され、DB更新。
- flashで、ERB::Util.h(@memo.title) たいとる名でメッセージ
-
showアクションから、editアクションへ、リダイレクト先を変更
- 保存した後も、編集画面に留まるように変更した
- 一覧へ戻るには、redirect_to :action => 'list'
- 僅かに手を加えるだけで、実用に耐ええるアプリが出来上がる。
制約条件を入れる(タイトルは必須項目)
- いろいろな制約や必須条件にするには、モデル・クラス
- memo/app/models/memo.rb
- モデルの制約を記載するのは、validates_* と呼ばれるメソッド群
-
必須項目指定は、validates_presence_of メソッド
class Memo < ActiveRecord::Base validates_presence_of:title end
-
タイトルが空白だと出るエラー・メッセージ
- validates_* メソッドには、文字数やフォーマットなど様々な属性を定義する機能がある。