如何在Active Record更新数据库后强制redirect_to重定向?

时间:2014-06-20 02:06:46

标签: ruby-on-rails

当我在Rails应用程序中更新用户并更新记录时,我经常需要按两次“提交”按钮才能重定向到我想要的页面。我第一次提交按钮时,页面似乎再次重定向到编辑页面,但随后闪烁消息不会显示。当所有记录都已满时,它应该重定向到显示页面,但仅在第二次单击后才会这样做。我在控制器操作中也有@asset = @user.asset.update_attributes()

以下是我的代码:

def update
    @user.update(user_params)
    if @user.asset
      @asset = @user.asset.update_attributes(:asset_one_type => Asset::IMAGE)
    else      
      @asset = @user.create_asset(:asset_one_type => Asset::IMAGE)
    end
    @incompleteArray = formFinished @user

    if @incompleteArray.length > 0
      @incomplete = true 
    else
      @incomplete = false
    end


    if @incompleteArray.length == 0
      p 'its doing this'
      redirect_to action: 'show'
    else
      p 'its doing that else'
      flash.now[:notice] = 'Please fill out the required fields.'
      redirect_to action: 'edit' , incomplete: @incomplete
    end

  end

1 个答案:

答案 0 :(得分:1)

如果是这样,您可能需要在执行任何其他操作之前检查更新是否成功。如果它工作,你仍然有两个选择。 incompleteArray是否为空。

  def update
    if @user.update(user_params)
      if @user.asset
        @asset = @user.asset.update_attributes(:asset_one_type => Asset::IMAGE)
      else
        @asset = @user.create_asset(:asset_one_type => Asset::IMAGE)
      end
      incompleteArray = formFinished @user # What does this do?

      incomplete = incompleteArray.length > 0

      if @incompleteArray.length == 0
        p 'its doing this'
        redirect_to action: 'show'
      else
        p 'its doing that else'
        flash.now[:notice] = 'Please fill out the required fields.'
        redirect_to action: 'edit' , incomplete: incomplete
      end
    else
      #whatever happens when @user.update fails
    end
  end

如果你没有在视图中使用它们,也不要使用这么多@variables。