模型方法在 Bookings 模型中有效,但在事件和票证中无效
Posted
技术标签:
【中文标题】模型方法在 Bookings 模型中有效,但在事件和票证中无效【英文标题】:Model methods work in Bookings model but not in Events and Tickets 【发布时间】:2014-09-15 17:45:14 【问题描述】:我正在使用 Ruby on Rails 4.1 创建一个机票预订应用程序作为我的示例项目。三是三种模式 - 活动、门票和预订。活动有很多门票和预订。门票有很多预订,它们属于活动。预订属于活动和门票。
我能够在 Booking.rb 中创建模型方法并能够在我的视图中使用它们。我什至可以通过这些方法从其他模型中提取数据。但是,当我尝试在 Event 和 Ticket 中使用模型方法并尝试在其展示页面中使用它们时,在尝试打印 @event.event_fire 或 @ticket 时出现未定义的方法“maximum_tickets_allowed”错误(或任何方法名称)。显示页面中的 maximum_tickets_allowed。 PFA 截图。 http://imgur.com/z74qAnN
预订模型:
class Booking < ActiveRecord::Base
belongs_to :event
belongs_to :ticket
has_many :charges
def total_amount
ticket.ticket_price.to_i * order_quantity.to_i
end
def test
ticket.maximum_quantity.to_i
end
end
预订显示页面:
<h2>Booking Show</h2>
<p><%= @booking.buyer_name %></p>
<p><%= @booking.order_quantity %></p>
<p><%= @booking.ticket.ticket_name %></p>
<p><%= number_to_currency(@booking.total_amount) %></p>
<p><%= @booking.test %></p>
这渲染得很好。问题出现在event.rb:
class Event < ActiveRecord::Base
has_many :tickets, dependent: :destroy
has_many :bookings
has_many :charges
def self.event_fire
self.about.upcase
#ticket.maximum_quantity.to_i * ticket.minimum_quantity.to_i
end
end
显示模板中甚至无法识别简单的计算。当我使用 @event.event_fire 打印值时。同样的情况也发生在票证模型方法中。
class Ticket < ActiveRecord::Base
belongs_to :event
has_many :bookings
def self.maximum_tickets_allowed
(1..maximum_quantity.to_i).to_a
#max = maximum_quantity.to_i
#self.maximum_quantity = (1..max).to_a
#self.maximum_quantity = max
end
end
源代码在这里https://bitbucket.org/stravarius/ticket-fire。我该如何克服这个问题?
【问题讨论】:
哪些观点会给您带来问题?? 【参考方案1】:尝试使用
class Ticket < ActiveRecord::Base
belongs_to :event
has_many :bookings
def maximum_tickets_allowed
(1..maximum_quantity.to_i).to_a
#max = maximum_quantity.to_i
#self.maximum_quantity = (1..max).to_a
#self.maximum_quantity = max
end
end
从self.maximum_tickets_allowed
中删除self
。自我用于类方法。您不能从实例方法访问类方法。查看更多http://www.railstips.org/blog/archives/2009/05/11/class-and-instance-methods-in-ruby/
【讨论】:
感谢@Avdept 的支持!! @SahilGrover 谢谢哥们!以上是关于模型方法在 Bookings 模型中有效,但在事件和票证中无效的主要内容,如果未能解决你的问题,请参考以下文章
在视图中的模型中保存文件有效,但在 Celery 任务中无效