我正在使用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等在同一模型方法中,但我在做这件事时遇到错误。此外,如果你能指出一个深入探索模型方法的资源,那将是很棒的。
答案 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