Rails:如何确定用户正在查看的页面?
Rails:如何确定用户正在查看的页面?
例如,我有一个页脚
<%= link_to '推文', tweets_path %> <%= link_to '博客', blogs_path %>
在推文索引页中,我想隐藏<%= link_to '推文', tweets_path %>
,并显示其他内容。我如何知道用户当前正在访问哪个resource
?
具体来说,我想要:
resources = ['推文', '博客'] # 获取模型名称,以后可能会添加更多内容 resources.each do |resource| if controller.controller_name = resource && controller.method_name = 'index' link_to new_resource_path # 例如,link_to new_tweet_path else link_to resource_path # 例如,link_to tweets_path end end
上面是大致的想法。但是在controller.controller_name
和link_to
方法中,我不知道具体的编写细节。
我从这里找到了controller.controller_name
。
有什么好方法可以做到这一点吗?
更新:
def footer_helper resources = ['tweet', 'blog'] # 以及可能还有其他内容 resources.each do |resource| if current_page?(controller: resource.pluralize, action: 'index') link_to "新建 #{resource.humanize}", {controller: resource.pluralize, action: 'new'} else link_to "#{resource.pluralize.humanize}", {controller: resource.pluralize, action: 'index'} end end end
现在我已经将其转换为上面的一个辅助方法。但是,我觉得.pluralize
和.humanize
很烦人,有没有办法摆脱它们?
另外,我如何在视图中使用它?当我使用<%= footer_helper %>
时,它显示["tweet", "blog"]
,没有正确返回。
Rails中如何确定用户正在浏览的页面?
要确定用户正在浏览的页面,可以使用一个很好的gem,以保持代码整洁:
https://github.com/robotmay/link_to_active_state
这个gem为默认的Rails link_to视图助手增加了一小部分额外的功能。它提供了一种非常简单的方法,可以根据当前路径为链接添加类。
让我们来看一下。
解决方法:
1. 首先,需要在Gemfile中添加gem 'link_to_active_state'。
2. 然后,运行bundle install来安装gem。
3. 在视图文件中,可以使用link_to_active_state方法来创建链接,并根据当前路径添加类。例如:
<%= link_to_active_state "Home", root_path %>
这将创建一个带有"active"类的链接,如果当前路径是根路径的话。
4. 还可以使用其他选项来自定义链接的类名和当前路径的匹配方式。例如:
<%= link_to_active_state "About", about_path, class: "custom-active", match: :exact %>
这将创建一个带有"custom-active"类的链接,仅当当前路径完全匹配about_path时才添加该类。
通过使用link_to_active_state gem,可以轻松确定用户正在浏览的页面,并根据需要为链接添加类。这样可以使页面更加动态和可交互。
在Rails中,我们有时候需要确定用户正在浏览的页面。为了达到这个目的,我们可以使用params[:action]
来确定用户所执行的操作,并使用params[:controller]
来确定该操作所在的控制器。通过使用这些参数,我们可以编写一些逻辑来处理我们的页脚。
要确定用户正在浏览的页面,可以使用以下代码:
current_action = params[:action] current_controller = params[:controller]
通过上面的代码,我们可以获得用户当前正在浏览的动作和控制器。
一旦我们确定了用户正在浏览的页面,我们可以根据需要编写逻辑。例如,我们可以在页脚显示不同的内容,取决于用户正在浏览的页面。
以下是一个例子:
if current_controller == "home" && current_action == "index" # 在首页显示特定内容 elsif current_controller == "products" && current_action == "show" # 在产品页面显示特定内容 else # 在其他页面显示默认内容 end
通过这种方式,我们可以根据用户正在浏览的页面来动态地显示不同的页脚内容。
总结起来,要确定用户正在浏览的页面,我们可以使用params[:action]
来确定动作,使用params[:controller]
来确定控制器。然后,我们可以根据这些参数编写逻辑来处理我们的页脚。
Rails: 如何确定用户正在查看的页面?
在Rails中,有时我们需要根据用户正在查看的页面来进行一些操作或显示不同的内容。要实现这个功能,我们可以使用`current_page?`助手方法。下面是一些示例代码:
第一种方法:
resources = ['tweet', 'blog'] resources.each do |resource| if current_page?(controller: resource, action: 'index') link_to(resource.humanize, { controller: resource, action: 'new' }) else link_to(resource.humanize, { controller: resource, action: 'index' }) end end
第二种方法是使用`link_to_if`助手方法进行改进:
resources = ['tweet', 'blog'] resources.each do |resource| link_to_if(current_page?(controller: resource, action: 'index'), resource.humanize, {controller: resource, action: 'new'}) do link_to(resource.humanize, {controller: resource, action: 'index'}) end end
如果不想使用计算机生成的界面文本(通常不推荐),可以考虑将资源定义为一个哈希表:
resources = {'tweets' => "Tweet", 'blogs' => "Blog"} resources.each do |resource, name| link_to_if(current_page?(controller: resource, action: 'index'), name, {controller: resource, action: 'new'}) do link_to(name, {controller: resource, action: 'index'}) end end
有一个问题是如何将`new_resource_path`传递给`link_to`方法?因为`resource`只是一个字符串,但我需要传递一个路径。对此,可以对代码进行一些修改。
如果想将这些代码封装成一个Helper,并在视图中使用,可能会遇到一些输出问题。如果遇到这种情况,可以进行一些修改和调试。
另外,有人可能对`.pluralize`和`.humanize`这两个方法感到烦恼,是否有办法不使用它们?实际上可以通过避免在代码中尝试创建界面文本来解决这个问题。可以参考我在帖子中的更新部分。