/ / Aktualizacja zmiennej z różnych szyn modelowych - ruby-on-rails

Aktualizacja zmiennej z różnych szyny modeli - ruby-on-rails

Mój system ma proces recenzji dla obiektu Paper. Co chcę zrobić, to zaktualizować status papieru do opublikowania, jeśli zostaną zaakceptowane 3 recenzje do Papieru.

Zrobiłem część recenzji i to działa. Użytkownik w zasadzie przegląda gazetę i po zaakceptowaniu recenzji zostanie mu nadany punkt.

Czy istnieje sposób, który mogę wdrożyć przy użyciu technologii AJAX, aby po osiągnięciu punktu 3 punktów zaktualizowano stan papieru w bazie danych do opublikowania?

Co zrobiłem, co nie aktualizuje statusu papieru, ale pokazuje, że zostało opublikowane:

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

Model papierowy:

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"

Model opinii:

belongs_to :user
belongs_to :paper

Odpowiedzi:

0 dla odpowiedzi № 1

powinieneś użyć acts_as_state_machine, aby zachować stan papieru

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

ilekroć ktoś recenzuje papier, a następnie sprawdza, czy punkt recenzji jest równy lub większy niż 3, zmień stan papieru na opublikowany.

paper.publish!

Donot zapomnij dodać aasm_state kolumna w twoim papierowym stole.

Robienie z Ajaxem nie jest niczym innym, wystarczy zaktualizować stan papieru w widoku, gdy punkt recenzji jest większy lub równy 3.