ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
検索
オンライン状況
30 人のユーザが現在オンラインです。 (3 人のユーザが ニュース を参照しています。)

登録ユーザ: 0
ゲスト: 30

もっと...
ruby on rails : accepts_nested_attributes_for で編集時にダブって登録される
投稿者: f-otake 投稿日時: 2015-11-15 0:21:52 (1752 ヒット)

rails version 4.xx
モデルには librarie と doc があり、それぞれ(抜粋)

class Library < ActiveRecord::Base
accepts_nested_attributes_for :docs, allow_destroy: true
class Doc < ActiveRecord::Base
belongs_to :library
となっています。
この時、libraries_controllers.rbのeditはdefaultのままで、edit.html.erbから飛ぶ_form.html.erb(抜粋)
<%= nested_form_for @library, :html => { :class => "form-horizontal library" } do |f| %><font color=#006400 ->
 ---------- 省略
    <table class="table table-striped">
      <thead>
        <tr>
          <th><%= model_class.human_attribute_name(:ファイル名  **編集の場合ファイル名とバージョンは変更不可**) %></th>
          <th><%= model_class.human_attribute_name(:バージョン) %></th>
          <th><%= model_class.human_attribute_name(:備考) %></th>
        </tr>
      </thead>
      <%= f.fields_for :docs do |df| %>
      <tr class="nested-fields">
        <td><%= f.text_field :file_name, :readonly => true, :size => 56 %></td>
        <td><%= f.text_field :version, :readonly => true, :size => 8 %></td>
        <td><%= f.text_area :remarks, :size => "30x1" %></td>
      </tr>
      <% end %>  
      <td></td><td><%= f.submit '保存', class: 'btn btn-primary' %></td>
    </table>
<% end %>
となっています。この状態でupdateすると、
データーベースに2重に登録され、もちろんshowにも二つづつ表示され、さらに悪いことに片方を削除するとデーターベースはつじつまが合うのですが、ここには記入してありませんが、Doc(色々なファイル)をWEBに保存してあり、それが削除され、残っているDocをクリックしてもファイルが無いのでエラーになります
あちゃちゃ、これは大変だー。何でだ!!........ そうかIDが無いので二重に登録されるのか、だったらIDも渡せばいいのだー。これは簡単、libraries_controllers.rbのストロング・パラメーターに登録しよう。
class LibrariesController < ApplicationController
  ---------- 省略
  private
    # Use callbacks to share common setup or constraints between actions.
    def set_library
      @library = Library.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def library_params
      params.require(:library).permit(:prod, :model, :serial_no, :seizo_nen, :company, :branch, :section,
       :incharge, :nonyu_bi, :remarks, :pictures,
             :docs_attributes => [:id, :file_name, :version, :remarks, :_destroy],
             :pictures_attributes => [:images, :_destroy]) ←これは他のモデルの分
    end
end
これでめでたし、めでたし
だけど、セキュリティー的にはどうなのかなー?IDを受け付けると言うことは改竄の危険があるのかな??詳しい方教えて下さい。お問い合わせから連絡出来ます。

Printer Friendly Page Send this Story to a Friend
 
投稿された内容の著作権はコメントの投稿者に帰属します。
テーマ選択

(4 テーマ)
ピックアップ画像
2007-09-20-09鐚
最近の画像
IMG_0004.jpg (2023-3-17)
IMG_0004.jpg
IMG_0003.jpg (2023-3-17)
IMG_0003.jpg
IMG_0010.jpg (2023-3-17)
IMG_0010.jpg
IMG_0013.jpg (2023-3-17)
IMG_0013.jpg
IMG_0007.jpg (2023-3-17)
IMG_0007.jpg
IMG_0005.jpg (2023-3-17)
IMG_0005.jpg
IMG_0002.jpg (2023-3-17)
IMG_0002.jpg
IMG_0011.jpg (2023-3-17)
IMG_0011.jpg
IMG_0009.jpg (2023-3-17)
IMG_0009.jpg
IMG_0008.jpg (2023-3-17)
IMG_0008.jpg
人気画像
ゴーキョピー... (6002 hits)
ゴーキョピー...
ギャチュンカ... (5864 hits)
ギャチュンカ...
ばあちゃんミ... (5765 hits)
ばあちゃんミ...
ヒマラヤ壁 (5671 hits)
ヒマラヤ壁
タムセルク残... (5478 hits)
タムセルク残...
Powered by Xoops2 Theme Modified by F-Otake
copyright (c) 2006 All rights reserved.