Ruby on Rails 6 - 如何根据特定路线建模/隐藏视图?
Posted
技术标签:
【中文标题】Ruby on Rails 6 - 如何根据特定路线建模/隐藏视图?【英文标题】:Ruby on Rails 6 - how to model/hide views depending on specific route? 【发布时间】:2020-04-22 11:54:04 【问题描述】:我想我不了解 Rails 中的路线。当用户在结帐页面时,我想隐藏导航栏和页脚。
到目前为止,我试图做这样的事情:
<body>
<% if current_page?(new_checkout_path) %>
<%= yield %>
<% else %>
<%= render 'layouts/navbar' %>
<%= yield %>
<%= render 'layouts/footer' %>
<% end %>
</body>
这是有效的。没有导航栏或页脚。
我的问题是当用户尝试提交表单并且验证不想接受时。
如果我理解正确:控制器尝试保存/创建 "post" 方法,但不能,所以它再次推动执行 :new ...现在我不明白了。
我们在 checkouts_path 但它实际上是 checkouts with method::post 而不是 :get 之一。这就是我们不呈现索引页面的原因。
为什么我们不再使用 new_checkout_path?因为我们的表格根本没有保存? 如果陈述如下,如何传递给我的穷人:
<% if current_page?(new_checkout_path) || current_page?(checkouts_path, method: :post %>
有没有办法做到这一点?我已阅读 Rails Routing from the Outside In 并尝试覆盖默认路由,但一无所获。有没有人耐心帮我理解一下?
谢谢。
【问题讨论】:
这能回答你的问题吗? Rails current_page? "fails" when method is POST 【参考方案1】:new
和 create
路由之间的区别是初学者常见的混淆来源,这完全取决于无能以及 REST 如何使用 HTTP 方法正确区分不同的操作。
# Given
rails g scaffold article title:string body:text
这给了我们一个GET /articles/new
路由,它只显示表单。这是一条幂等路线,因为它将向任何访问者显示相同的结果。当我们实际发布表单时,它会以POST /articles
的形式发送,这是一个非幂等操作,因为它会创建资源。
class ArticlesController < ApplicationController
before_action :set_article, only: [:show, :edit, :update, :destroy]
# ...
# POST /articles
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article, notice: 'Article was successfully created.'
else
render :new
end
end
# ...
private
# Use callbacks to share common setup or constraints between actions.
def set_article
@article = Article.find(params[:id])
end
# Only allow a trusted parameter "white list" through.
def article_params
params.require(:article).permit(:title, :body)
end
end
您和其他人都在关注render :new
。此行不重定向。它只是呈现/app/views/articles/new.html.erb
并在响应中发送它。浏览器中的路径是/articles
,因为那是表单提交的地方。您看到的是执行非幂等操作的结果。
如果您想检查您是否处于特定控制器的新操作或创建操作中,您想使用 controller_name 和 action_name:
<% if controller_name == "checkouts" && ["new", "create"].include?(action_name) %>
# ...
<% end %>
【讨论】:
以上是关于Ruby on Rails 6 - 如何根据特定路线建模/隐藏视图?的主要内容,如果未能解决你的问题,请参考以下文章
如何计算 ruby on rails 中的特定评分计数哈希?
如果 Ruby on Rails 中有设置限制,如何显示特定的 div 元素
使用 Ruby on Rails 4 和 Nginx 读写 cookie