相同的控制器操作,但基于提交的参数/视图的不同重定向

时间:2014-03-25 12:36:28

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

我在Rails 4中遇到一个奇怪的问题,涉及我的某个模型的更新操作。

有2个视图可供用户编辑产品:标准edit_product视图和从桌面应用程序访问的其他准系统edit_product_images视图,不提供任何其他应用程序布局

两个视图在提交表单时都会导致更新操作。但是,虽然我希望完整的Web浏览器视图在保存后返回到产品#show视图,但是一旦更新操作完成,精简版本应该只重新加载edit_product_images页面。

当然,我可以创建另一个与现有更新操作非常相似但仅使用不同重定向的操作。然而,这似乎非常多余。相反,我打算在提交:same_page => 1表单时通过隐藏字段传递额外的edit_product_images参数。

在我的更新操作中,我有以下代码来检查此更新操作是否为params[:same_page] == "1"

products_controller.rb

def update

  respond_to do |format|

    if @product.update(product_params)

      format.html do
        if params[:same_page] == "1"
          render action: "edit_product_images", layout: false
        else
          redirect_to @product, notice: 'Product was successfully updated.'
        end  
      end

      format.json { head :no_content }

    else
      format.html { render action: 'edit' }
      format.json { render json: @product.errors, status: :unprocessable_entity }
    end
  end

end

不幸的是,虽然if params[:same_page] == 1子句似乎总是返回false,所以我只是被重定向到product#show视图。我检查了日志,参数在表单提交时传递。为什么我的if语句会失败?

我在这里缺少什么?有没有更好的方法来处理这个功能?毕竟我只想要基于原始视图的不同重定向来触发动作 - 附加参数似乎是实现此目的的最简单方法。我虽然愿意接受更好的解决方案。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

如果从表单传递隐藏字段,则它可能嵌套在product哈希中。 由于您尚未共享相关的params哈希,因此我建议您使用params[:product][:same_page]代替params[:same_page]并查看它是否适合您。

您可以检查服务器日志中的params哈希值,看看其中是否传递了same_page

答案 1 :(得分:-1)

试用if params[:same_page] == true这可以解决您的问题

答案 2 :(得分:-2)

尝试使用params[:same_page] == '1'代替params[:same_page] == "1"