将状态从待定更改为已批准

时间:2015-10-09 02:25:47

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

你好,我有一个haml索引。

%h1 Requests
%table
%thead
  %tr
    %th Request Template
    %th User
    %th Sent At
    %th Status
%tbody
  - @requests.each do |request|
    %tr
      %td= link_to request.request_template_id, admin_request_template(requests.request_template_id)
      %td= request.user_id
      %td= request.request_sent_at
      %td= request.status

如果你在最后一行看到它说request.status。现在,它使用请求模型中的after_save显示默认设置为待处理的状态。

我希望用户点击状态并将其更改为已批准。我该怎么做?我有一个可以显示状态的数组。我还有一个Requests表的状态列。

请参阅下面的我的请求模型。

class Request < ActiveRecord::Base
  belongs_to :request_template
  belongs_to :user

  has_many   :request_answers, autosave: true

  validates :request_template, :user, presence: true

  after_create :send_notification, :status_pending

  STATUSES= %w[pending approved]

  def send_notification
    RequestMailer.delay.new_request_admin_notification(id)
    request_notification_sent_date!
  end

  def request_notification_sent_date!
    update_attribute :request_sent_at, Time.current
  end

  def pending!
    update_attribute :status, "pending"
  end

  def approved!
    update_attribute :status, "approved"
  end
end

1 个答案:

答案 0 :(得分:2)

request.status旁边,您可以找到更新操作的链接:

link_to 'Approve', request_path(request, request: {status: 'approved'}), method: put

如果您使用强参数,则应将RequestsController设置为接受status参数

PS:与问题无关,但是如果您将status列的默认值设置为pending,那么您将不需要after_create回调来设置状态