2011-02-24 41 views
0

場景:我有一個帶有新事件記錄的EventsController。根據我想要處理的事件/記錄,我可能需要創建一個新的票據記錄。Rails 3 - 創建新記錄不起作用

class Ticket < ActiveRecord::Base 
    belongs_to :event 

class Event < ActiveRecord::Base 
    has_many :tickets 

在我的EventController中,例如,我有一個方法。

def do_something 
    @event = Event.find(params[:id]) 
    # I would like to create a Ticket record here 
end 

我試圖在我的方法如下:上述

@ticket = Ticket.new(:event_id => @event.id) 
    @ticket.ticket_name = @event.event_name 
    @ticket.ticket_quantity = 1000 
    @ticket.ticket_price = 0 
    @ticket.save 

絕對沒有。我甚至沒有在我的日誌中發現任何錯誤。 以及本:

Ticket.create!(
    :event_id  => @event.id, 
    :ticket_name   => @event.event_name, 
    :ticket_quantity => 1000, 
    :ticket_price => 0) 

對於這一個:我得到: 的ActiveRecord :: RecordInvalid(驗證失敗:事件是不允許創建門票):

我不知道,如果我甚至在正確的地方做或不做。 感謝

+0

我應該注意到,我試圖在EventsController中的do_something方法中創建這兩個egs,以防它不清楚。 – 2011-02-24 14:10:07

回答

0

在命令行中執行

rails console 

,設法在那裏創建票據對象,看看你會得到什麼輸出,然後張貼在這裏,這將有助於弄清楚什麼問題。你

也可以看看

@ticket.errors 

在調試器,看看是否有任何。

+0

這樣的事情? >> @e = Event.find(:last) =>#<事件ID:40016,event_name:「測試免費事件」,...> >> @ticket = Ticket.new(:event_id = > @ e.id) =># > > @ ticket.ticket_name ='Test Ticket' =>「Test Ticket」 >> @ ticket.save => false >> @ ticket.errors =># [「Event is不允許創建門票「]}>' – 2011-02-24 15:11:35

+0

你對這些模型有一些驗證,你使用的是一些插件還是寶石?請列出他們,beacouse這是我第一次看到這樣的錯誤;) – 2011-02-24 17:45:15

4

與您當前的模型關聯,創建新的Ticket的正確方法是通過Event對象。像這樣:

@ticket = @event.tickets.create(:ticket_name => @event.event_name, 
           :ticket_quantity => 1000, 
           :ticket_price => 0) 

請注意,您不必指定event_id

欲瞭解更多深入解釋,請看active record associations

在附註中,在您的Event控制器中,如果您的save!也應該爲您丟出錯誤。添加爆炸!將做驗證,如果失敗,則拋出錯誤。

+0

因此,在我的EventsController中試過這個 'def my_method @event = Event.find(params [:id]) @ event.tickets.create :ticket_name => @ event.event_name, :ticket_quantity => 1000, :ticket_price => 0) if @ event.save! ' 我得到我的日誌這樣的錯誤: _ActiveRecord :: RecordInvalid(驗證失敗:門票基地的事件是不允許創建門票)_ – 2011-02-24 15:56:55

+0

我確實有這種處理創建自己的門票TicketsController。只要將事件ID傳遞給協會的參數並且工作正常。 但是,如果在特定事件上有特定條件,我想創建一個票證,而不必使用Forms For字段和控制器。只需立即創建一切。 – 2011-02-24 16:01:01

相關問題