【问题标题】:ruby on rails application wide method in helper vs. controller?帮助程序与控制器中的 ruby​​ on rails 应用程序范围的方法?
【发布时间】:2011-11-02 01:15:44
【问题描述】:

我有几个变量希望所有控制器都可以访问。所以我在 application_controller.rb 中定义了它们:

      before_filter :initialize_vars

  def initialize_vars
    @siteTitle = "my title"
    @companyName = "company"    
  end

那里没有问题。 我想对徽标做类似的事情,所以我创建了另一个使用 before_filter 调用的方法。

  def logo
    image_tag("Logo.jpg", :alt => "Logo")
  end

徽标 img 的一个实例应链接到站点根目录,因此我将其命名为:

<%=h link_to logo, root_path %>

但它在我的布局中不起作用!当我将我的 logo 方法添加到 application_helper.rb 时,一切正常。嗯嗯。

什么/哪里是所有这些东西的合适位置?我的意思是仅仅因为我能够使它工作并不能使它正确!

我是否应该像我所做的那样在 application_controller 中定义我的实例变量(我将其视为全局变量)和我的助手中的 logo 方法?我觉得我在这里缺少一些基本的理解,为什么他们需要去不同的地方。我不确定这是我如何调用“徽标”方法或我将它放在哪里。我将尝试如何调用以及如何编写 logo 方法,因为我觉得这两种方法都应该放在 application_controller 中。

想法?

谢谢!

【问题讨论】:

    标签: ruby-on-rails methods controller helper


    【解决方案1】:

    与渲染视图相关的函数放置在帮助文件中。 它们通常生成 HTML 内容。如果在应用程序中很多地方都使用了helper方法,请将它们放在application_helper.rb中,否则它们必须放在相应的helper文件中。

    由于您拥有的实例变量将在许多控制器中被访问,您可以像您一样在应用程序控制器中初始化它们。

    【讨论】:

      【解决方案2】:

      辅助方法用于与视图相关的方法,因为使用辅助方法的是您的视图。您拥有的实例变量看起来应该被重构为利用 content_for 的方法,然后在您的主布局文件中生成它们。

      http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-content_for

      http://railscasts.com/episodes/8-layouts-and-content-for

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-22
        • 1970-01-01
        • 1970-01-01
        • 2015-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-14
        相关资源
        最近更新 更多