我在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语句会失败?
我在这里缺少什么?有没有更好的方法来处理这个功能?毕竟我只想要基于原始视图的不同重定向来触发动作 - 附加参数似乎是实现此目的的最简单方法。我虽然愿意接受更好的解决方案。
感谢您的帮助。
答案 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"