Вложенные атрибуты Coccon Gem для необязательной формы - PullRequest
0 голосов
/ 12 октября 2018

У меня есть модель активности

class Activity < ApplicationRecord
  accepts_nested_attributes_for :activity_documents, reject_if: proc { |attributes| attributes[:document].blank? && attributes[:document_title].blank? }, allow_destroy: true
end

Другая модель

class ActivityDocument < ApplicationRecord
  mount_uploader :document, DocumentUploader
  belongs_to :activity
end

Контроллер Покупка с действием 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>

Теперь документы action_documents, относящиеся к этому документу, могут быть загружены из двух разных мест.Создание самого действия или из действия PurchaseController.

Мне нужно, чтобы документы, загруженные с помощью создания действия, были недоступны для редактирования / удаления с помощью действия действия PurchaseController, поскольку будут два разных типа документов, которые будут загружены двумя разными типами пользователей.

Другой вариант может состоять в том, чтобы разрешить только загрузку нового документа и не разрешать редактирование предыдущих.

1 Ответ

0 голосов
/ 12 октября 2018

Этот ответ, кажется, решил мою проблему.

Мы внесли следующее изменение:

<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>

в

  <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>
...