2010-01-06 104 views
6

我有一個Bill模型,嵌套Customer模型。 Customer型號有一個電話號碼和一個唯一性驗證。 創建帳單時,我想根據電話號碼獲取現有記錄,或者創建一個新帳單(如果不存在)。 我該怎麼做RESTful的方式?Ruby on Rails - 嵌套屬性:如何查找或創建嵌套模型

+0

在進一步的研究和谷歌上搜索,我發現,我可以添加一個:ID關鍵customer_attributes和軌道更新記錄,而不是創建一個新的。換句話說,我必須發出一個customer_attributes [:id] = find_by_phone(customer_attributes [:phone])。id 我不明白(還)是模型生命週期中的哪個鉤子(之前/之後,驗證/保存),甚至是我應該這樣做的模型(客戶/賬單)。 在這種情況下,解決方案似乎相當平凡,但它在深度嵌套字段中變得複雜。 – TMaYaD 2010-02-25 14:38:07

回答

0

您可以查看find_or_create或find_or_create_by方法(它們是動態創建的)。我想,一個小小的Google應該讓你在那裏。

2

你可以使用find_or_create_by方法,會是這個樣子,你的情況:

fetchedRecord = Bill.find_or_create_by_phone_number(customer.phone_number) 
0

它似乎並不像這些答案你問。

忘掉Rails吧,我的問題是,創建一個可能已經存在的資源的RESTful方法是什麼?你是否應該POST資源(列表)URL,然後期望一個HTTP狀態代碼爲201(如果資源已經創建)和一個200(如果它已經存在)?

這樣的似乎應該在標準的地方闡明。

順便說一句,這是我如何處理它 - 與狀態代碼。

0

我把礦的關聯回調before_add

+0

請在評論部分留言。 – 2012-11-25 05:31:17