【Ruby on Rails】簡単なCRUDを書いてみる【学習記録2】

前回に引き続き。今回は簡単な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>

できた新規登録ページはこんな感じ。

スクリーンショット 2013-10-17 23.34.37

記事の編集

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>

編集ページ。
スクリーンショット 2013-10-17 23.47.24

スクリーンショット 2013-10-17 23.47.56

削除に関してはconfirmでアラートを出してからの削除。

スクリーンショット 2013-10-17 23.49.03

スクリーンショット 2013-10-17 23.49.22
バリデーションとか セッションまわりとか もう少し慣れておきたいので 次回以降はそのあたりを書いていく予定。あとは基本的な操作に慣れてきたら「確認ページ」の実装とかもやっていこう。

Written by Nisei Kimura ( 木村 仁星 )

- Sponsored Links -

<<

Top

>>