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できるようにしたい。
まあ、のちのち、、、
ディスカッション
コメント一覧
まだ、コメントがありません