【发布时间】:2019-07-01 21:01:09
【问题描述】:
有多个答案可以解释如何拥有嵌套资源,但是,我的用例有点不同。
批次属于订单,一个订单有多个批次。
如果您有订单表格并且可以在该表格中创建批次,我可以理解它是如何工作的,但无法理解适合我的情况的好方法。
我有一个嵌套资源(批次)的表单,其中父级(订单)可能存在也可能不存在。他们可以通过单选按钮选择它是否存在。如果它存在,那么他们只需简单地选择它属于哪个订单......简单。如果它不存在,我会显示订单字段并在批处理参数旁边提交订单参数。如果批次没有保存,我想确保回滚订单创建。
这是我到目前为止的代码。
def create
@batch = Batch.new(batch_params)
Batch.transaction do
if params[:new_order] == "newOrder"
@order = Order.new(order_params)
@order.project_id = params[:batch][:project_id]
begin
@order.save!
rescue
respond_to do |format|
format.html { render action: 'new' }
format.json { render json: {order: @order.errors}, status: :unprocessable_entity }
format.js { render json: {order: @order.errors}, status: :unprocessable_entity }
end
raise ActiveRecord::Rollback
return
end
#@batch.order_id = @order.id
end
respond_to do |format|
begin
@batch.save!
format.html { redirect_to @batch, notice: 'Batch was successfully created.' }
format.json { render json: @batch }
format.js { render json: @batch }
rescue
binding.pry
raise ActiveRecord.Rollback
format.html { render action: 'new' }
format.json { render json: {batch: @batch.errors}, status: :unprocessable_entity }
format.js { render json: {batch: @batch.errors}, status: :unprocessable_entity }
end
end
end
end
这与我想要的不太一样,而且看起来很丑陋。我有一种感觉,我让它变得比我需要的更困难。在这种情况下最好的方法是什么?非常感谢!
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 activerecord