さっそく作ろう、という前にちょっとお話。
データベースの基本操作はCRUD/Create, Read, Update, Deleteの4つから成り立っているそうです。この4つをRailsで実現するには7つのアクションを用意するのが一般的。
7つ・・・・・index, show, new, edit, create, update, destroy
なんとなく名前から、それぞれがどんな役割を担うか分かると思います。
それでは「user_controller.rb」の編集から。
class UsersController < ApplicationController
def index
@users = User.find(:all)
end
def show
@user = User.find(params[:id])
end
#indexとshowは前回と同じです。
def new
@user = User.new
end
#モデルクラス名.newで新しいレコード作成
def edit
@user = User.find(params[:id])
end
#showと同じ
#新規作成用フォーム
def create
@user = User.new(params[:user])#上のnewでの値を受け取っています。
if@user.save
flash[:notice] = '新しいユーザーが追加されました!'
redirect_to :action => 'show' , :id => @user #処理が終わったら新規作成したユーザーのshow/(id)へ
else
render :action => 'new'
end
end
#flashで、画面に処理表示の結果を出力することができます。
def update
@user = User.find(params[:id])
@user.attributes = params[:user]
@user.save
if@user.save
flash[:notice] = '情報が更新されました'
redirect_to :action => 'show' , :id => @user#処理が終わったら,更新したページ=show/(id)へ
else
render :action => 'edit'
end
end
#editの値をうけとってupdateしています。
def destroy
@user = User.find(params[:id])
@user.destroy
flash[:notice] = '削除しました'
redirect_to :action => 'index'#処理が終わったらindexへ
end
end
7つのアクションを編集しました。
次はそれぞれのViewを編集していきます。
まずはindex.rhtml.erb
<h1>Test003: Users : indexページ</h1>
<div class ="notice"><%= h(flash[:notice])%></div>#Flashによる、処理結果の表示
<p><%= link_to('新規ユーザー作成', :action => 'new')%></p>
<% @users.each do |user| -%>
<li>
<%= link_to(h(user.user_name), :action => 'show', :id => user.id)%>
<%= link_to('編集', :action => 'edit', :id => user.id)%>
<%= link_to('削除', {:action => 'destroy', :id => user.id},
{:method => :post, :confirm => '本当に削除しますか?'})%>
</li>
<% end -%>
次に、edit.rhtml.erb
<h1>Members#edit#ユーザーデータを編集する</h1>
<% form_for :user, @user,
:url=>{:action => 'update', :id => @user} do |form| %>
<p>名前: <%=form.text_field :user_name, :size => 16 %> </p>
<p>曲: <%=form.text_field :listening_song, :size => 16 %> </p>
<p>メッセージ:<br /><%=form.text_area :message, :colse =>40, :rows => 3%> </p>
<p>
<%= form.submit '更新' %>
</p>
<% end %>
<p><%= link_to('一覧へ戻る', :action => 'index') %></p>
次はnew.rhtml.erb
<h1>Users#new#新しいユーザーを作る</h1>
<% form_for :user, @user,
:url=>{:action => 'create'} do |form| %>
<p>名前: <%=form.text_field :user_name, :size => 16 %> </p>
<p>曲: <%=form.text_field :listening_song, :size => 16 %> </p>
<p>メッセージ:<br /><%=form.text_area :message, :colse =>40, :rows => 3%> </p>
<p>
<%= form.submit 'Create' %>
</p>
<% end %>
<p><%= link_to('一覧へ戻る', :action => 'index') %></p>
これで完成。
私がつまずいていたのは
form_for
の記述方法。URL => 'アクション名'は、editはupdate/newはcreateになります。
1 件のコメント:
updateの時に、@user.saveとやって
その後に、if @user.saveとやると
2回SQlが発行されると思います。
コメントを投稿