【Ruby on Rails】簡単なCRUDを書いてみる【学習記録2】
2013.10.17
前回に引き続き。今回は簡単なCRUDメインで。
(そして前回に引き続き「Scaffoldでやれば」って話だけど やっぱり便利なツール使う上で根幹の事はしっかり理解していたいので)
記事の新規登録
articlesコントローラのnewアクション、createアクションをいじる。
def new @article = Article.new end def create @article = Article.new(params[:article]) if @article.save redirect_to @article, notice: "記事を登録しました。" else render "new" end end
noticeに関してはapplication.html.erbで flash.notice を記述する。
続いてView部分。new.html.erb を用意し、以下のように記述。
<% @page_title = "記事の投稿" %> <h2><%= @page_title %></h2> <%= render "articles/form" %>
更新の際にもフォームを使い回せるようにフォーム入力部分のテンプレート _form.html.erb を用意し、レンダリング。_form.html.erbのコードは以下のように記述した。
<%= form_for @article do |form| %> <table> <tr> <th><%= form.label :title %></th> <td><%= form.text_field :title, size: 50 %></td> </tr> <tr> <th><%= form.label :body %></th> <td><%= form.text_area :body, rows: 15, cols: 50 %></td> </tr> <tr> <th><%= form.label :expired_at %></th> <td><%= form.date_select :expired_at, start_year: 1990, end_year: 2030, use_month_numbers: true %></td> </tr> </table> <%= form.submit %> <% end %>
各属性の名称は i18nあたりをbundle installして ja.ymlなど別ファイルに記述するような感じで良いかも。
article/index.html.rb に以下のコードを加えて新規登録へのリンクをつける。
<p><%= link_to "[記事の新規作成]", :new_article %></p>
できた新規登録ページはこんな感じ。
記事の編集
articlesコントローラの edit アクション、 update アクションをいじる。
def edit @article = Article.find(params[:id]) end def update @article = Article.find(params[:id]) @article.assign_attributes(params[:article]) if @article.save redirect_to @article, notice: "記事を更新しました。" else render "edit" end end
Viewファイルとして edit.html.erb を以下のような感じで用意。フォーム入力部分は 記事登録の時につくった _form.html.erb を使用。
<% @page_title = "記事の編集" %> <h2><%= @page_title %></h2> <%= render "articles/form" %>
記事の削除
Viewに編集へのリンクを追加する前に、記事の削除も実装してしまう。削除に関してはarticlesコントローラを以下のように記述。
def destroy @article = Article.find(params[:id]) article.destroy redirect_to :articles, notice: "記事を削除しました。" end
View部分の show.html.erb に以下のコードを追加。
<p> <%= link_to "[編集]", [:edit, :article] %> <%= link_to "[削除]", @article, method: :delete ,confirm: "この記事を削除しますか?"%> </p>
削除に関してはconfirmでアラートを出してからの削除。
バリデーションとか セッションまわりとか もう少し慣れておきたいので 次回以降はそのあたりを書いていく予定。あとは基本的な操作に慣れてきたら「確認ページ」の実装とかもやっていこう。
Written by Nisei Kimura ( 木村 仁星 )