@helo = Helo.find(params['id'])Viewテンプレート側では、フォームの作成を<%= form_for(@helo) do |f| %>というようにして行なっています。@heloインスタンス変数の内容を引数に渡してform_forを呼び出しているわけですね。この@heloに、あらかじめ検索しておいたModelインスタンスを渡しておけば、それに応じて自動的にフォームが生成されます。もちろん、フォームの各コントロールには、Modelインスタンスに保管されている各データが自動的に設定され表示されます。
obj = Helo.find(params[:id])findでは、params[:id]というようにして送られたパラメータからIDの値を取り出しています。そしてupdate_attributesでは、引数にparams[:helo]を指定しています。これで、そのまま送信されたフォームの内容がupdate_attributesで更新されテーブルに反映されるのです。なんか騙されてるんじゃ?と思うくらいに簡単ですね。
obj.update_attributes(params[:helo])
http:/ドメイン/helos/番号/edithelosの後に更新するレコードのID番号が、その後にeditが付きます。この後、routes.rbを修正する関係で、こう変わります。
※リストが表示されない場合
AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。
※edit.html.erb
<p><%= @msg %></p>
<hr>
<%= form_for(@helo) do |f| %>
<% if @helo.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@helo.errors.count, "error") %> prohibited this helos from being saved:</h2>
<ul>
<% @helo.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :content %><br />
<%= f.text_field :content %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
※edit/updateアクション
def edit
@title = "サンプルレイアウト"
@header_content = "データの更新"
@msg = "データの更新を行います。"
@helo = Helo.find(params['id'])
end
def update
obj = Helo.find(params[:id])
obj.update_attributes(params[:helo])
redirect_to obj
end
| << 前へ | 次へ >> |