Существует несколько ответов, объясняющих, как вы можете использовать вложенные ресурсы, однако мой вариант использования немного отличается.
Партии принадлежат заказам, а заказ состоит из множества партий.
IЯ могу понять, как это работает, если у вас есть форма для заказа и вы можете создавать партии в этой форме, но не можете найти хороший способ для моей ситуации.
У меня есть форма для вложенного ресурса (партии), гдеродитель (заказ) может или не может существовать.Они могут выбрать, существует ли он с помощью переключателей.Если он существует, они просто выбирают, к какому порядку он относится .. просто.Если его не существует, я показываю поля для заказа и отправляю параметры заказа вместе с параметрами партии.Я хочу убедиться, что откат создания заказа выполнен, если партия не сохраняется.
Вот код, который у меня есть до сих пор.
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
Это ведет себя не совсем так, как я хочу, и кажется довольно уродливым.У меня ощущение, что я делаю это сложнее, чем нужно.Каков наилучший подход в такой ситуации?Очень ценится!