Ruby on rails 相同的控制器操作,但基于提交的参数/视图的重定向不同
我在Rails 4中遇到了一个奇怪的问题,它与我的一个模型的更新操作有关 有两个视图允许用户编辑产品:标准的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页面 当然,我可以创建另一个与现有更新操作非常相似的操作,
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
不幸的是,ifparams[: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这样的值本身被用作参数后也会转换为字符串。当然,我不敢相信我一直在兜圈子,却错过了这么一个明显的错误。非常感谢!当然,我不敢相信我一直在兜圈子,却错过了这么一个明显的错误。非常感谢!