WITNESS が添付された INCIDENT があります。
ネストされた属性から添付ファイルを削除するためのリンクを表示しようとしていますが、リンクがネストされた/子レコード (invoice.witness_id) ではなく、親レコード (invoice.id) の :id を取得しています。
ルートで何か間違ったことをしていること、またはコントローラーまたはビューから正しい ID 番号を呼び出していることを知っています...どんな助けも大歓迎です!
インシデント.rb
has_many :witnesses
accepts_nested_attributes_for :witnesses, :reject_if => :all_blank, :allow_destroy => true
目撃者.rb
belongs_to :incident
has_attached_file :statement
ルート.rb
match 'witness/:id' => 'witnesses#remove_statement', via: [:get, :post], as: 'remove_statement'
目撃者_コントローラー
def index
@witnesses = @incident.witnesses.all
end
def remove_statement
@witness = Witness.find(params[:id])
@witness.statement = nil
respond_to do |format|
if @witness.save
format.html { redirect_to :back, notice: 'Attachment was removed.' }
format.json { head :no_content }
else
format.html { redirect_to :back, error: 'Attachment could not be removed.' }
format.json { render json: @witness.errors, status: :unprocessable_entity }
end
end
end
private
def set_witness
@witness = @incident.witnesses.find(params[:id])
end
def witness_params
params[:witness].permit(:first_name, :last_name, :phone, :email, :statement, :incident_id)
end
_witness_fields パーシャル
<div class="nested-fields">
<div class="form-group">
....
<%= link_to "Remove Attachment", remove_statement_path, :id => :witness_id %>
...
件/_form.html.erb
<%= form_for(@incident, html: { :multipart => true , class: 'form-horizontal' }) do |f| %>
<%= f.error_notification %>
<% if @incident.errors.any? %>
<div class="red">
<% @incident.errors.full_messages.each do |msg| %>
<%= msg %><hr>
<% end %>
</div>
<% end %>
.....
<!-- WITNESS SECTION -->
<div class="span6">
<hr>
<fieldset id="witnesses">
<%= f.fields_for :witnesses do |builder| %>
<%= render 'witness_fields', :f => builder %>
<% end %>
</fieldset>
<p class="links">
<%= link_to_add_association 'Add Witness/Contact', f, :witnesses, { class:"btn btn-primary" } %>
</p>
</div>
</div>
<!-- END WITNESSES SECTION -->
.....