Rails5で複数のデータを一括変更(2)
以下の続き
http://twosquirrel.mints.ne.jp/?p=9390
(4)config/routes.rb をさらに変更。
[sourcecode language='bash' padlinenumbers='true'] match '/ramen/all/edit' => 'ramen#edit_all', as: 'edit_all_raman', :via => :get match '/ramen/all' => 'ramen#update_all', as: 'update_all', :via => :put resources :ramen [/sourcecode]
match '/ramen/all/edit' => 'ramen#edit_all', as: 'edit_all_raman', :via => :get match '/ramen/all' => 'ramen#update_all', as: 'update_all', :via => :put resources :ramen
と変更した。
rails s -b 0.0.0.0 してから、ブラウザで、http://localhost:3000/rails/info/routes を開くと、以下のような表示。
(5)app/controllers/ramen_controller.rb に以下を追加。
[sourcecode language='bash' ]
#GET /ramen/all/edit
def edit_all
@ramen = Raman.all
end
#PUT /ramen/all
def update_all
params.permit!
params['raman'].keys.each do |id|
@raman = Raman.find(id.to_i)
@raman.update_attributes(params['raman'][id])
end
redirect_to(ramen_url)
end
[/sourcecode]
#GET /ramen/all/edit
def edit_all
@ramen = Raman.all
end
#PUT /ramen/all
def update_all
params.permit!
params['raman'].keys.each do |id|
@raman = Raman.find(id.to_i)
@raman.update_attributes(params['raman'][id])
end
redirect_to(ramen_url)
end
エディタ(今回はAtom)では以下のようになる。
この params.permit! は、strong parameterによるエラー対策であるが、これではセキュリティ的に終わっているので、どうしても改善しなければならないところ。それはまた後日の課題として、、、(爆)
(6)app/views/ramen/ フォルダに、edit_all.html.erb を作成し、以下のように記載して保存。
[sourcecode language='ruby' ]
<h1>Editing Raman</h1>
<%= form_for :raman, :url => update_all_path, :html => { :method => :put } do %>
<table>
<tr>
<th>name</th>
<th>price</th>
</tr>
<% @ramen.each do |raman| %>
<%= fields_for "raman[]", raman do |raman_fields| %>
<tr>
<td><%= raman_fields.text_field :name %></td>
<td><%= raman_fields.text_field :price %></td>
</tr>
<% end %>
<% end %>
</table>
<div class="actions">
<%= submit_tag %>
</div>
<% end %>
[/sourcecode]
<h1>Editing Raman</h1>
<%= form_for :raman, :url => update_all_path, :html => { :method => :put } do %>
<table>
<tr>
<th>name</th>
<th>price</th>
</tr>
<% @ramen.each do |raman| %>
<%= fields_for "raman[]", raman do |raman_fields| %>
<tr>
<td><%= raman_fields.text_field :name %></td>
<td><%= raman_fields.text_field :price %></td>
</tr>
<% end %>
<% end %>
</table>
<div class="actions">
<%= submit_tag %>
</div>
<% end %>
エディタ(今回はAtom)では以下のようになる。
(7)app/views/ramen/index.html.erb の最後の行に、以下を加える。
[sourcecode language='ruby' ] <%= link_to 'Edit All Ramen', edit_all_raman_path %> [/sourcecode]
<%= link_to 'Edit All Ramen', edit_all_raman_path %>
エディタ(今回はAtom)では以下のようになる。
(8)rails s -b 0.0.0.0 してから、ブラウザで、localhost:3000/ramen を開く。
New Raman で、上記3つの情報を追加してから、Edit All Ramen をクリック
無事、一括変更できるようにはなった、、、が、、、
(問題点1)ramen_controller.rb の、def update_all で、params.permit! がセキュリティ的にやばい
(問題点2)本当は、update_all ではなく、特定の条件(特定の日付や、さらに特定の条件絞り込み(号室))で、上記のようにEditできるようにしたい。
まあ、のちのち、、、



ディスカッション
コメント一覧
まだ、コメントがありません