Rails 4.1嵌套模型表单字段

时间:2014-04-16 05:00:27

标签: ruby-on-rails

预订 - <订单 - <交易

class Booking < ActiveRecord::Base
  has_many :orders
end

class Order < ActiveRecord::Base
  belongs_to :booking
  has_many :transactions
end

class Transaction < ActiveRecord::Base
  belongs_to :order
end

我需要能够创建Transaction而不存在OrderBooking

我试图实现以下目标: 创建Transaction后,会自动创建OrderBooking。交易表单可以使用Booking.booking_number保存到上面自动创建的Booking

我对rails非常陌生并尝试了accepts_nested_attributes_for,Ryan Bates&#39; nested model form part1 screencastform_fields_for没有成功。

非常感谢一些指导,不一定是代码。

我的路线如下:enter image description here

2 个答案:

答案 0 :(得分:1)

  

我需要能够在没有订单或预订的情况下创建交易   现有

糟糕的系统设计 - 交易肯定会关注订单或预订?

从您的问题来看,我强烈建议您先预订或订购。这样您就可以将事务创建为orderbooking

#app/controllers/bookings_controller.rb
Class BookingsController < ApplicationController
   def create
       booking = Booking.new(booking_params)
       booking.save
   end
end

#app/models/booking.rb
Class Booking < ActiveRecord::Base
    before_create :build_transaction #-> creates a blank transaction which can be populated later
end

尽管如此,没有什么可以阻止你创建交易&amp;稍后分配订单

你可以这样做:

#app/controllers/transactions_controller.rb
def create
    Transaction.new(transaction_params)
end

#app/models/transaction.rb
Class Transaction < ActiveRecord::Base
    after_create :order

    def order
        self.order.create!([order_details?])
    end
end

如果您告诉我更多关于您正在建设的内容,我将能够创建更精确的回复!

答案 1 :(得分:0)

试试这可能有用。 在你的模型中         accepts_nested_attributes_for :order, :allow_destroy => true 根据你的表格改变是真是假