【问题标题】:Rails 3 View helper method in ModelRails 3 在模型中查看辅助方法
【发布时间】:2011-09-18 23:08:28
【问题描述】:

我的模型中有一个类方法,我需要从我的一个视图助手中访问一个方法。目前我包括include TalkHelper,但我仍然得到一个NoMethodError。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 view-helpers


    【解决方案1】:

    在您的模型中,您可以执行以下操作:

    ApplicationController.helpers.your_helper_method
    

    YourController.helpers.your_helper_method
    

    最佳解决方案是重构您的代码,这样您就根本不需要从模型中调用视图帮助程序代码。这不是 RoR 方式。正如其他人指出的那样,您可以将帮助代码提取到 lib 文件夹。

    查看更多信息:

    http://railscasts.com/episodes/132-helpers-outside-views

    【讨论】:

    • 我最终听从了您的建议并重构了我的代码,这样我就不必在模型中使用辅助方法了。
    【解决方案2】:

    您可以将 helper 放在您的 lib 文件夹中并将它们包含在任何地方。 像这样: lib/some_helper.rb

    module SomeHelper
      def somedef
        #your code there
      end
    end
    

    【讨论】:

    • 应该是module(小写)?
    【解决方案3】:

    如果您在类方法中需要帮助器,则需要 extend 它,而不是 include 它。

    module TalkHelper
      def woo; 'hoo' end
    end   
    
    class MyClass
      extend TalkHelper
    
      def self.boo; woo end
    end
    
    MyClass.boo #=> 'hoo'
    

    请注意视图上下文之外的助手,因为助手可能依赖于controller,或者来自请求上下文的其他内容,这些在您的模型中不可用。

    【讨论】:

      猜你喜欢
      • 2011-07-28
      • 2023-03-03
      • 1970-01-01
      • 2015-06-26
      • 1970-01-01
      • 2012-12-30
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多