【发布时间】:2014-03-25 12:36:27
【问题描述】:
我在 Rails 4 中有一个奇怪的问题,涉及我的一个模型的更新操作。
有 2 个视图允许用户编辑产品:标准 edit_product 视图和额外的准系统 edit_product_images 视图,可从桌面应用程序访问,不提供任何额外的应用程序布局。
当提交表单时,这两个视图都会导致更新操作。但是,虽然我希望完整的 Web 浏览器视图在保存后返回到 product#show 视图,但精简版应该在更新操作完成后重新加载 edit_product_images 页面。
当然,我可以创建另一个与现有更新操作非常相似的操作,但只是使用不同的重定向。然而,这似乎非常多余。相反,我打算在提交edit_product_images 表单时通过隐藏字段传递一个额外的:same_page => 1 参数。
在我的更新操作中,我有以下代码来检查 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 语句会失败?
我在这里缺少什么?有没有更好的方法来处理这个功能?毕竟我只想要基于触发动作的原始视图的不同重定向 - 附加参数似乎是实现这一目标的最简单方法。不过,我愿意接受更好的解决方案。
感谢您的帮助。
【问题讨论】:
-
可以分享一下
edit_product_images页面提交表单时生成的服务器日志吗?
标签: ruby-on-rails forms redirect ruby-on-rails-4 controller