2010-01-06 102 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