【问题标题】:Ruby on Rails liquid theme detect current page and either display banner or notRuby on Rails 液体主题检测当前页面并显示横幅或不显示
【发布时间】:2015-06-09 13:57:11
【问题描述】:

仅在“视图”中...我无权访问控制器或其他任何东西。

我正在尝试弄清楚如何检测页面并根据页面显示横幅或不显示横幅。
什么都没有传承下来。需要的是如果您在此页面上 > 显示横幅。 ELSE - 您在此页面上 - 不显示横幅。

<div class="thebnr"><img src="{{ 'thebnr.png' | asset_url }}" alt="{{ the.name }}" itemprop="bnr"></div>

我搜索并搜索但只看到当前页面之类的内容? ...不知道如何让它工作。

【问题讨论】:

  • 显示代表与页面相关的任何内容的代码,而不是横幅 html。是否有任何与页面相关的变量传递给视图?分页 gem 的名称(如果您正在使用)?
  • 不存在的只是上面显示的代码。什么都没有传承下来。因此,如果您在此页面上 > 显示横幅,则需要这样做。 ELSE - 您在此页面上 - 不显示横幅。
  • 没有任何东西被传递,但您需要这些信息才能做出决定。你看到这里的问题了吗?您需要 page 变量,否则您无法解决这个逻辑问题。另外:您使用的是什么框架?您的代码不是有效的 ruby​​ 插值,例如&lt;%= some_var %&gt;
  • 这看起来像车把
  • 无需通过控制器向下传递任何内容。它可以查看 URL 并确定它是什么页面,就像 PHP 一样。

标签: ruby liquid


【解决方案1】:

你可以在你的:

# app/helpers/application_helper.rb

module ApplicationHelper

  def page?(page, returnval = true)
    controller, action = page.split('#')
    return returnval if params[:controller] == controller and ( action.nil? or action. params[:action] == action)
    nil
  end

end

那么在你看来,你可以这样使用它:

<% if page?('controller#action') %>
...
<% end %>

returnval 是一个简洁的参数,如果操作与指定的操作匹配,您可以使用它来修改 page? 方法的返回值。否则,该方法将返回 nilnil == false,因此您可以安全地在 if 中使用它。

使用returnval 参数的示例是:

<li class="<%= page?('controller#action', 'active') %>">

【讨论】:

  • 有趣的是人们无法真正阅读。我在第一篇文章中说了什么?仅供查看。
  • @Jad 如果您声明此帮助程序,您将能够从您的视图中访问该信息。
  • 老兄离开吧。我告诉了你需要什么,你决定按照自己的方式去做。那样不行。
【解决方案2】:

这是解决方案 -

{% if page.url == "/pages/about" %}
   <div class="thebnr"><img src="{{ 'thebnr.png' | asset_url }}" alt="{{ the.name }}" itemprop="bnr"></div>
{% else %}
   other thing
{% endif %}

【讨论】:

  • 这应该会失败:undefined local variable or method 'page' 除非你在某处有页面助手。
  • Itay Grudev 它工作正常我现在正在使用它。它显示我希望它显示的横幅。你在想深人,离开吧……
  • 未定义的局部变量或方法`page'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 2012-04-07
相关资源
最近更新 更多