如果存在记录,则重定向自动编辑页面

时间:2015-06-17 04:32:37

标签: ruby-on-rails ruby-on-rails-4 redirect

如果不存在,我想创建一条新记录。否则,重定向到自动编辑页面。

如果记录存在(例如:@sale不是nil)。但是,我收到了错误消息:

  

app / views / sales / _form.html.erb第1行引发:

     

表单中的第一个参数不能包含nil或为空

请出示我错误的地方。

sales_controller.rb

  def new
    @sale = Sale.find_on_today
    if @sale.nil?
      @sale = Sale.new
    else
      redirect_to edit_sale_path(@sale)
    end
  end

  def edit
  end

  # POST /sales
  def create
    Kpi.transaction do
      @sale = Sale.new(sale_params)
      @sale.user_id = current_user.id
      respond_to do |format|
        if @sale.save
          format.html { redirect_to sales_path, notice: 'Sale was successfully created.' }
        else
          format.html { render :new }
        end
      end
    end
  end

  # PATCH/PUT /sales/1
  def update
    respond_to do |format|
      if @sale.update(sale_params)
        format.html { redirect_to sales_path, notice: 'Sale was successfully updated.' }
      else
        format.html { render :edit }
      end
    end
  end

  private
  def sale_params
    params.require(:sale).permit(:sale_money, :no_of_items)
  end

_form.html.erb

<%= form_for @sale do |f| %>
  <label for="sale_money"><%= t('.sale_money_label')%></label>
  <%= f.text_field :sale_money, class: "form-control" %>

  <label for="no_of_items"><%= t('.no_of_items_label')%></label>
  <%= f.text_field :sale_amount, class: "form-control" %>

  <%= f.submit t('.btn_submit'), class: 'btn btn-primary' %>
<% end %>

更新:根据fylooi的回答,我忘了重定向是一个新请求,因此@salenil。我在控制器中更改方法neweditupdate,它正在运行

sales_controller.rb

def new
    @sale = Sale.find_on_today
    if @sale.nil?
        @sale = Sale.new
    else
        redirect_to edit_sale_path(@sale.id)
    end
end

def edit
    @sale = Sale.find(params[:id])
end

def update
    @sale = Sale.find(params[:id])
    respond_to do |format|
      if @sale.update(kpi_params)
        format.html { redirect_to kpis_path, notice: 'Sale was successfully updated.' }
      else
        format.html { render :edit }
      end
    end
end

edit.html.erb

<%= render partial: 'form' %>

1 个答案:

答案 0 :(得分:1)

redirect是对Rails的新请求。您需要在@sale操作中再次设置edit,因为update不会保留edit

或者,如果更新失败,您可以直接从update呈现update视图。这将保留somelist的实例变量。