更新故障单计数来自预订模型方法

时间:2014-07-25 15:38:30

标签: ruby-on-rails ruby

我正在使用Ruby on Rails 4.1为我的示例项目创建一个票务预订应用程序。三个是三个模型 - 活动,门票和预订。活动有很多门票和预订。门票有很多预订,属于活动。预订属于活动和门票。

这是票证模型:

class Ticket < ActiveRecord::Base
  belongs_to :event
  has_many :bookings

 def maximum_tickets_allowed
   (1..maximum_quantity.to_i).to_a
 end
end

Booking.rb中的一种模型方法是:

class Booking < ActiveRecord::Base
  belongs_to :event
  belongs_to :ticket
  has_many :charges

def check_ticket_count
  count = ticket.ticket_quantity.to_i - order_quantity.to_i
  ticket.ticket_quantity = count
end

此方法用于在成功后打印剩余票证的数量,并且工作正常。我想知道用这个值更新总票数(表格中的ticket_quantity字段)的最佳方法是什么。我看过他们在控制器中做的一些例子。什么是Rails方式?

我尝试过使用ticket.ticket_quantity.save!和ticket.ticket_quantity.update等在同一模型方法中,但我在做这件事时遇到错误。此外,如果你能指出一个深入探索模型方法的资源,那将是很棒的。

1 个答案:

答案 0 :(得分:0)

目前您没有保存故障单,因此会放弃更新。

你试过吗

count = ticket.ticket_quantity.to_i - order_quantity.to_i
ticket.update_attribute(:ticket_quantity,count)

update_attribute不需要保存,因为它在没有验证的情况下自动保存。

虽然您应该验证order_quantity是&lt; = ticket_quantity

,例如

class Booking < ActiveRecord::Base
 ...
  #just threw this in for you too
  after_create :update_ticket_count

  validates :order_quantity, numericality:{less_than_or_equal_to: ->(booking){ booking.ticket.ticket_quantity}}

  def update_ticket_count
    ticket.update_attribute(:ticket_quantity,ticket.ticket_quantity.to_i - self.order_quantity)
  end

end