当两个字段对应于可能的未初始化对象时,如何基于两个字段find_or_initialize

时间:2013-01-06 08:32:21

标签: ruby-on-rails-3

大家好我有一种情况,我正在接受汽车维修申请的订单。我有以下型号:

Car
belongs_to :car_company

Car_company
has_many :cars

Services
attributes_accessible :car_company_id, :car_id
#virtual attributes
attributes_accessible :car_company_name, :car_reg

事情是,在单一表格上,用户可以输入汽车公司的名称以及汽车的注册号。如果公司名称不存在,它会创建一个新公司并将其与服务相关联,同样适用于汽车。我得到了这个部分的工作,但事实是,我希望在提交此表单时,创建的汽车应该自动与car_company关联,无论carcompany存在还是不存在。

我非常关注如何以正确的方式完成这件事?它基本上只是为了避免必须单独输入汽车细节和公司细节只是为了在表格上使用它们。任何想法的家伙?

1 个答案:

答案 0 :(得分:0)

我发现你使用的是非传统的模型名称。按惯例,在rails中,您的模型应为CarCompany。但是,我认为你所拥有的将会奏效。

在适当的控制器中放置这样的东西可能就像你想要的那样。如果没有,请澄清你想要的东西。

car_company = Car_company.find_or_initialize_by_name(params[:car_company_name])
car = Car.find_or_initialize_by_registration(params[:car_registration])
car_company.cars << car
car_company.save

你实际上可以将中间的两行与car_company.cars.find_or...结合起来,但我不确定这是否有效。

我希望有所帮助。