I have a Model Activity
class Activity < ApplicationRecord
accepts_nested_attributes_for :activity_documents, reject_if: proc { |attributes| attributes[:document].blank? && attributes[:document_title].blank? }, allow_destroy: true
end
Another Model
class ActivityDocument < ApplicationRecord
mount_uploader :document, DocumentUploader
belongs_to :activity
end
A Controller Purchase with action Activity
class PurchaseController < ApplicationController
def activity
@activity = Activity.find_by_id(params[:id])
@activity.activity_documents.build
end
end
ERB activity.html.erb
<%= simple_form_for @activity, :url => take_activity_path, :method => :post , html: { class: "exercise-form"} do |f| %>
<!-- nested attributes start -->
<section class="show-section">
<div class="row">
<div class="col l12"><h4>Documents</h4></div>
<div class="col s12">
<%= f.simple_fields_for :activity_documents do |builder| %>
<% render 'activity_document_fields', f: builder %>
<% end #f.simple_fields_for%>
<div class="links">
<%= link_to_add_association 'Add Documents', f, :activity_documents, class: "btn mb-2" %>
</div>
</div>
</div>
</section>
<% end %>
_activity_document_fields.html.erb
<div class="nested-fields">
<div class="row">
<div class="col l12">
<%= f.input :document_title %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.hidden_field :user_type, :value => current_user.role %>
</div>
<div class="col l8">
<%= f.input :document %>
</div>
<div class="col l1 mt-3">
<%= link_to_remove_association "delete", f, class: "material-icons teal-text text-lighten-1" %>
</div>
</div>
</div>
Now the activity_documents related to this document can be uploaded from two different places. The creation of Activity itself or from the PurchaseController activity.
I need the documents uploaded via activity creation to not be editable / remove-able via the PurchaseController action of activity as there will be two different types of documents and will be uploaded by two different types of users.
Another option may be to only allow new document upload and not allow editing previous ones.
This answer seems to solve my issue.
We made the following change:
<section class="show-section">
<div class="row">
<div class="col l12"><h4>Documents</h4></div>
<div class="col s12">
<%= f.simple_fields_for :activity_documents do |builder| %>
<% render 'activity_document_fields', f: builder %>
<% end #f.simple_fields_for%>
<div class="links">
<%= link_to_add_association 'Add Documents', f, :activity_documents, class: "btn mb-2" %>
</div>
</div>
</div>
</section>
to
<section class="show-section">
<div class="row">
<div class="col l12"><h4>Documents</h4></div>
<div class="col s12">
<%= f.simple_fields_for :activity_documents, @activity.activity_documents.build do |builder| %>
<% render 'activity_document_fields', f: builder %>
<% end #f.simple_fields_for%>
<div class="links">
<%= link_to_add_association 'Add Documents', f, :activity_documents, class: "btn mb-2" %>
</div>
</div>
</div>
</section>