ruby on rails : accepts_nested_attributes_for で編集時にダブって登録される
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 %>
データーベースに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を受け付けると言うことは改竄の危険があるのかな??詳しい方教えて下さい。お問い合わせから連絡出来ます。
投稿された内容の著作権はコメントの投稿者に帰属します。