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

Ruby on rails 相同的控制器操作,但基于提交的参数/视图的重定向不同,ruby-on-rails,forms,redirect,ruby-on-rails-4,controller,Ruby On Rails,Forms,Redirect,Ruby On Rails 4,Controller,我在Rails 4中遇到了一个奇怪的问题,它与我的一个模型的更新操作有关 有两个视图允许用户编辑产品:标准的edit_product视图和一个附加的裸体edit_product_图像视图,该视图可从桌面应用程序访问,不提供任何附加的应用程序布局 提交表单时,这两个视图都会导致更新操作。但是,虽然我希望完整的web浏览器视图在保存后返回到product#show视图,但精简版应该在更新操作完成后重新加载edit_product_images页面 当然,我可以创建另一个与现有更新操作非常相似的操作,

我在Rails 4中遇到了一个奇怪的问题,它与我的一个模型的更新操作有关

有两个视图允许用户编辑产品:标准的
edit_product
视图和一个附加的裸体
edit_product_图像
视图,该视图可从桌面应用程序访问,不提供任何附加的应用程序布局

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

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

在我的更新操作中,我使用以下代码检查
params[:same_page]=“1”
是否适用于此更新操作:

产品\u 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
视图。我检查了日志,并在表单提交时传递了参数。为什么我的陈述会失败

我错过了什么?有没有更好的方法来处理这个功能?毕竟,我只是希望根据触发操作的原始视图进行不同的重定向-附加参数似乎是实现这一点的最简单方法。不过,我愿意接受更好的解决方案


谢谢您的帮助。

尝试
params[:same\u page]=“1”
而不是
params[:same\u page]=“1”

尝试
params[:same\u page]=“1”
而不是
params[:same\u page]=“1”
如果参数[:same\u page]=“true”
这可能会解决您的问题[:same_page]==true这可能会解决您的问题

如果从表单传递隐藏字段,则它可能嵌套在
产品
哈希中。 由于您尚未共享所讨论的params散列,我只能建议您使用
params[:product][:same_page]
而不是
params[:same_page]
,看看它是否适合您


您可以检查服务器日志中的
参数
散列,并查看
相同的页面
是如何在其中传递的。

如果隐藏字段是从表单传递的,则它可能嵌套在
产品
散列中。 由于您尚未共享所讨论的params散列,我只能建议您使用
params[:product][:same_page]
而不是
params[:same_page]
,看看它是否适合您


您可以检查服务器日志中的
params
散列,并查看
相同的页面
是如何在其中传递的。

我尝试过,但已经了解到参数总是作为字符串传递的,这就是为什么您必须将param与“1”或“true”进行比较的原因不要为真,再举一个例子。为真!检查我编辑的答案。基本上是单引号而不是双引号。这会有什么区别:“1”和“1”?由于一些奇怪的原因,它在过去对我产生了影响?:/I我不这么认为。你可能误判了一些东西。“1”和“1”完全相同。试试
“1”=='1'
在rails控制台中。我尝试过,但已经了解到参数总是作为字符串传递的,这就是为什么您必须将参数与“1”或“true”进行比较而不是“true”来给出另一个示例。这是真的!检查我编辑的答案。基本上是单引号而不是双引号。这会有什么区别:“1”和“1”?由于一些奇怪的原因,它在过去对我产生了影响?:/我不这么认为。你可能误判了某些东西。“1”和“1”完全相同。请尝试
“1”=='1'
在rails控制台中。您可以共享在
编辑产品图片
页面中提交表单时生成的服务器日志吗。您可以共享在
编辑产品图片
页面中提交表单时生成的服务器日志吗。它不起作用。正如在对Oscar答案的响应中所解释的,在c中,参数始终作为字符串传递ase“1”,不等于true。即使像true这样的值本身也会在用作参数后转换为字符串。它不起作用。正如在对Oscar的回答的响应中所解释的,参数始终作为字符串传递,在本例中为“1”,这不等于true。即使像true这样的值本身被用作参数后也会转换为字符串。当然,我不敢相信我一直在兜圈子,却错过了这么一个明显的错误。非常感谢!当然,我不敢相信我一直在兜圈子,却错过了这么一个明显的错误。非常感谢!