Rails 中是否有任何方法可以检查用户当前正在查看的页面?
我的例子:在我网站的 head 部分,我需要知道用户是否打开了博客文章。如果用户正在查看帖子,则需要在头部部分添加 facebook 打开图元标记,因为用户可以选择喜欢该博客帖子。
如果有人可以帮助我,那将是无价的。
Rails 中是否有任何方法可以检查用户当前正在查看的页面?
我的例子:在我网站的 head 部分,我需要知道用户是否打开了博客文章。如果用户正在查看帖子,则需要在头部部分添加 facebook 打开图元标记,因为用户可以选择喜欢该博客帖子。
如果有人可以帮助我,那将是无价的。
正如其他答案所提到的,您可以通过检查request
对象或params
哈希来检查当前页面。
但是有更好的方法来设置 Facebook 元标记,而无需明确检查页面上下文。content_for
辅助方法在这里是一个完美的选择。请参阅此处的文档:http: //api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-content_for
基本上,content_for
将块作为参数并捕获可以在其他地方显示的输出yield
。
因此,您可以在视图中捕获一些内容:
# index.html.erb (blog index)
<% content_for :facebook_meta do %>
<meta content='My blog' property='og:site_name'>
...
<% end %>
# show.html.erb (single blog post)
<% content_for :facebook_meta do %>
<meta content='<%= @post.title %>' property='og:site_name'>
...
<% end %>
并在布局中显示它们:
# application.html.erb (application layout)
<html>
<head>
<%= yield :facebook_meta %>
</head>
</html>
在这种情况下,上述内容比检查当前控制器/动作要干净得多。您只需在它们适用的地方定义 Facebook 元标签。
在#RubyOnRails IRC 频道中 Radar 的帮助下,我使用了以下代码:
params[:action]
和params[:controller]
您可以使用控制器中可用的请求助手检查请求的所有上下文(操作、控制器、标头...)
http://api.rubyonrails.org/classes/ActionDispatch/Request.html