从不同的模型轨道更新变量

时间:2014-04-24 03:57:49

标签: ruby-on-rails

我的系统对其Paper对象进行了审核。我想要做的是如果接受论文的3篇评论,则将论文状态更新为已发布。

我已经完成了评论部分并且它有效。用户基本上对论文进行评论,一旦评论被接受,论文将被给予一个观点。

有没有办法可以使用AJAX实现,这样一旦审核点达到3,它会将数据库中的纸张状态更新为已发布?

我所做的并没有更新论文的状态,但表明它已发布:

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

纸模型:

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'

评论模型:

belongs_to :user
belongs_to :paper

1 个答案:

答案 0 :(得分:0)

你应该使用acts_as_state_machine来维护纸张的状态

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

每当有人评论论文时,请检查评论点是否等于或大于3,然后将论文状态更改为已发布。

paper.publish!

不要忘记在纸质表格中添加 aasm_state 列。

使用Ajax也不例外,只需在审核点大于或等于3时更新纸质状态。