模型方法在 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 任务中无效

Unity模型点击事件

ngModel innerHTML 在 p 标签中有效,但在输入标签 angular2 中无效

如何防止模型事件使用 phpunit 触发?

有效管理数据变更

OpenGL 纹理在 3.3 中都是黑色的 - 但在 3.1 中有效