我正在尝试构建一些具有特定属性值的嵌套对象。清单has_many
订单,以及订单has_many
order_events。构建期间设置的嵌套属性值未被保存
理想情况下,创建并保存新列表时,应该创建并保存相关订单(使用seller_id设置)和order_event(使用状态设置)。
我遇到了两个问题:
顺序保存,但seller_id不是。
order_event根本没有保存。
在控制器中,我有:
def new
@listing = Listing.new
@order = @listing.orders.build(seller_id: current_user.id)
@order_event = @listing.orders.first.order_events.build(state: 'confirmed')
end
def create
@listing = Listing.new(listing_params)
respond_to do |format|
if @listing.save
format.html { redirect_to manage_path, notice: 'Listing was successfully created.' }
format.json { render :show, status: :created, location: @listing }
else
format.html { render :new }
format.json { render json: @listing.errors, status: :unprocessable_entity }
end
end
end
def listing_params
params.require(:listing).permit(:title, :address, :size, :min_lease, :price, :description, :state, space_ids: [], amenity_ids: [], images_files: [], images_attributes: [:id, :_destroy], orders_attributes: [:id, :_destroy, :start, :end, :seller_id, order_events_attributes: [:id, :_destroy, :state]])
end
任何想法?
您是否在视图中为订单和订单事件添加了字段到窗体?提交表单时,这些属性会在创建操作期间丢失并“重建”。 –
不,我最初在表单中使用'hidden_fields'设置值,但是我从表单中删除了这些值,并将逻辑移至控制器。 –
在这种情况下,您应该在保存列表之前将这两个分配移至您的创建操作。这样,它们包含在清单 –