2011-12-01 20 views
1

我到處尋找類似的錯誤,但無法找到解決方案,所以在絕望中我在這裏發佈。Rails創建方法不向表中添加記錄,但適用於IRB

我的控制器有這樣的:

def add_upc 
     @upcs = Dvd.add_upc(params[:dogTag], params[:newUpc]) 
    end 

,並在模型中,我們有:

def self.add_upc(dogTag, newUpc) 
    existingUpc = Dvd.find(dogTag).dvd_upc2title.find_by_upc(newUpc) 
    if existingUpc.nil? 
     createdUpc = Dvd.find(dogTag).dvd_upc2title.create(:upc => newUpc) 
     if createdUpc 
      upcs = createdUpc 
     else 
      upcs = 'Error: nothing was created' 
     end 
    end 
end 

我已經成立了一個視圖頁面,看看發生了什麼,我可以看到該對象被創建通過createdUpc。我也可以確認參數dogTag和newUpc正確傳遞。然而這個記錄並沒有被添加到表格中。

奇怪的是,如果我發出Dvd.find(dogTag).dvd_upc2title.create(:upc => newUpc)命令,並用IRB中的變量代替值,這會起作用。

無法弄清楚爲什麼這不起作用。我是Rails的新手,所以不知道我可以用什麼其他的錯誤調試來找出問題所在。

想法是歡迎的。

謝謝。

編輯:

發現錯誤感謝RyanWilcox,它告訴我,值已經存在(即使的UPC都應該是獨一無二的我已經在控制器UPC設置驗證是否有辦法。到2場的組合驗證?

+0

看看你的日誌/ development.log並嘗試用這些參數執行Dvd.add_upc。可能會有一些命名問題或諸如此類。所以試着把你在方法中使用的所有參數都放在一起。 – phoet

+0

@phoet這給我一個線索。當我從IRB運行Dvd.add_upc時,日誌沒有顯示任何內容,但它確實返回了':newUpc',這不是我所期望的。我是否正確地從控制器傳遞參數? ':newUpc'符號是什麼意思? – kakubei

回答

1

我真正喜歡做的這樣的情況下(「爲什麼會這樣不救?」)使用create!,而不是create

這將在拋出一個異常錯誤,將驗證失敗的文本作爲異常的消息使這樣的問題顯而易見。

+0

啊,太棒了!不知道這件事。使用'create!'會產生這樣的錯誤:'驗證失敗:Upc已被佔用。但我不確定這是什麼意思。 Upc(首都)似乎指的是這個模型?這些值在表中不存在,所以不是這樣。 – kakubei

+0

發現它,這是我在UPC的控制器中設置的驗證,告訴我該值已經存在。有沒有一種方法來驗證2個字段的組合? – kakubei

+0

這是一個很好的問題,我不知道我頭頂的答案。我的建議是做一些Google搜索或打開另一個SO問題。 (這可能是一個「可能的,但非顯而易見的」答案)。 – RyanWilcox

相關問題