【问题标题】:Accessing ApplicationHelper from User.rb model从 User.rb 模型访问 ApplicationHelper
【发布时间】:2012-01-22 13:46:21
【问题描述】:

下面是一些不起作用的简单代码:

module ApplicationHelper
  def industries
    industries = ['Agriculture','Food', etc.]
  end
end

class User < ActiveRecord::Base
  include ApplicationHelper
  validates_inclusion_of :industries, :in => ApplicationHelper.industries
  ...
end

当使用undefined method 'industries' 运行用户操作时,此代码将失败。你知道我如何以正确的方式引用帮助者(或者最好只是行业)吗?


编辑

根据 Mauricio 下面的回答中的代码,如何在控制器和视图中访问 INDUSTRIES?我在让行业随处可访问时遇到了真正的麻烦,但它确实需要用于我的应用程序。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 helper


    【解决方案1】:

    你应该永远不要做这样的事情。 ApplicationHelper 不应该包含在模型中。最佳解决方案是:

    class User < ActiveRecord::Base
        INDUSTRIES = ['Agriculture','Food']
        validates_inclusion_of :industries, :in => INDUSTRIES
    end
    
    module ApplicationHelper
        def industries
            User::INDUSTRIES
        end
    end
    

    现在你已经以一种简单而漂亮的方式完成了。

    编辑

    您需要访问您应该使用的行业的任何地方:

    User::INDUSTRIES
    

    就是这样。

    【讨论】:

    • 感谢您的回答 Mauricio - 您能告诉我为什么我永远不应该做我想做的事吗?
    • 另外,我现在如何从我的视图中访问行业?
    • 毛里西奥的回答听起来像是要走的路。知道您也可以将全局变量放入config/application.rb 或任何环境文件中,这可能会对您有所帮助。当信息不是特定于型号时,通常会看到人们这样做 - stackoverflow.com/questions/2562249/…
    • 我也有类似的情况。当我遵循 Mauricio 的回答时,Rspec 崩溃:C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rspec-core-2.8.0/lib/rspec/core/configuration.rb:698:堆栈级别太深 (SystemStackError)
    • 我应该注意到规范/支持文件之一包括 ApplicationHelper。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 2013-12-06
    相关资源
    最近更新 更多