如果更新失败,则渲染用户在救援块中输入的数据

时间:2017-09-01 07:54:00

标签: ruby-on-rails ruby ruby-on-rails-5 rest-client

我有rails 5.0.1 app(App 1)工作,它使用另一个Rails API进行数据库操作。 应用1未使用有效记录,但使用flexirest进行Api呼叫。

调用create或update方法时,所有数据都以json格式发送到rails api。 我想当api抛出任何错误时,它应该在rescue块中捕获,并且用户在提交点击之前输入的数据应该在使用render进行救援后渲染:edit(用于更新)或render:new(用于创建)

这是我的代码

    def update
      respond_to do |format|
        begin
          if @booking.update({id: @booking.booking.id, booking: booking_params})  
            format.html { redirect_to excel_front_innstats_path, notice: display_notice(t("label.detailed_reservation.reservation")) }
          else
            format.html { render :edit }
          end
        rescue => e
          #here assign the booking object with user entered data, 
          #so that the form will not loose the data
          #if exception occurs

          flash_error_message(:error, e.result)
          format.html { render :edit }
        end  
      end
    end

1 个答案:

答案 0 :(得分:0)

这可以轻松实现,您需要在 @.html edit.html.erb 形式中进行一些更改。

渲染 edit.html.erb 时,请务必检查 params hash中是否存在相应的输入字段值。如果值存在,则从params中分配字段值,否则从@booking中分配字段值。

例如编辑(更新):

<input type='text' name='booking_name' value="<%= params[:booking_name] ? params[:booking_name] : @booking.booking_name%>"/>

例如New(Ureate):

<input type='text' name='booking_name' value="<%= params[:booking_name]%>"/>

我希望你有办法。