Mi sistema tiene un proceso de revisión para su objeto Papel. Lo que quiero hacer es actualizar el estado del documento a publicado si se aceptan 3 revisiones para el documento.
Hice la revisión y funciona. Un usuario básicamente revisa el documento y una vez que se acepta la revisión, se le dará un punto al artículo.
¿Hay alguna manera de implementarlo utilizando AJAX para que una vez que los puntos de revisión hayan llegado a 3, actualice el estado del papel en la base de datos para que se publique?
Lo que he hecho no actualiza el estado del documento, pero muestra que está publicado:
<p class="status">
<strong>Status:</strong>
<% status = 0 %>
<% @paper.reviews.each do |review| %>
<% status += review.review_status %>
<% end %>
<% if status >= 3 %>
Paper published
<% else %>
Paper under reviewing process
<% end %>
<p>
Modelo de papel:
belongs_to :user
belongs_to :subject
has_many :comments
has_many :reviews
#file dependencies
has_attached_file :pdf,
:url => "/assets/:attachment/:id/:basename.:extension",
:path => ":rails_root/public/assets/pdfs/:id/:basename.:extension"
#validations
validates :title, presence: true, length: { maximum: 150 }
validates :subject_id, presence: true
validates :version, presence: true
validates_attachment_content_type :pdf, :content_type => "application/pdf"
Modelo de revisión:
belongs_to :user
belongs_to :paper
Respuestas
0 para la respuesta № 1debe usar acts_as_state_machine para mantener el estado del papel
revisa https://github.com/aasm/aasm
class Paper < ActiveRecord::Base
include AASM
aasm do
state :under_review, intial: true
state :published
event :publish do
transitions from: :under_review, to: :published
end
end
end
cada vez que alguien revise el papel, verifique si el punto de revisión es igual o mayor que 3 y luego cambie el estado del papel a publicado.
paper.publish!
No olvides agregar aasm_state columna en su mesa de papel.
Hacer las cosas con Ajax no es diferente, simplemente actualice el estado del papel a la vista cuando el punto de revisión sea mayor o igual a 3.