Ruby on rails Rails:在模型中使用roo加载表,继续获取:NoMethodError:undefined方法'asset#u path';

Ruby on rails Rails:在模型中使用roo加载表,继续获取:NoMethodError:undefined方法'asset#u path';,ruby-on-rails,actionviewhelper,roo-gem,Ruby On Rails,Actionviewhelper,Roo Gem,我试图提供一个接口,从电子表格文件“预加载”表格。听起来很简单,但作为一个完全的新手,我正在承受着沉重的考验。在文件在资源中预编译后,我使用了操作_viewhelper asset _path来定位该文件,但似乎我没有正确地包含这些helper,因为我一直在为#获取“NoMethodError:undefined method`asset_path”。这是我的型号代码: require 'rubygems' require 'roo' require 'action_view' class

我试图提供一个接口,从电子表格文件“预加载”表格。听起来很简单,但作为一个完全的新手,我正在承受着沉重的考验。在文件在资源中预编译后,我使用了操作_viewhelper asset _path来定位该文件,但似乎我没有正确地包含这些helper,因为我一直在为#获取“NoMethodError:undefined method`asset_path”。这是我的型号代码:

require 'rubygems'
require 'roo' 
require 'action_view'

class Item < ActiveRecord::Base
  include ActionView::Helpers
  validates :description, presence: true, length: { maximum: 240 }
  validates :category, presence: true
  has_many :interests
  has_many :members, through: :interests
end

def populate_items_table
  from_file = asset_path("item_listing.ods")
  original_list = Openoffice.new(from_file)
  original_list.default_sheet = original_list.sheets.first
  headers = original_list.row(1)
  ...
end
需要“rubygems”
需要“roo”
需要“操作视图”
类项
如果有人能指出我的错误所在,我将不胜感激。还有,我是不是在用“Rails”的方式?这种代码应该在模型中还是其他地方?我猜在其他地方,否则合适的助手可能已经被定义了

这里有类似的问题,例如,但答案似乎与我正在做的没有任何不同

@shishir:这里是建议包含特定模块时的堆栈跟踪:

错误[“测试\u应\u重新加载\u项\u表”,ItemsControllerTest, 2016-03-22 08:43:53 +0000] 测试应重新加载项目表项目控制器测试(1458636233.20s) NoMethodError:NoMethodError:undefined方法
asset\u路径'
为了#
app/models/item.rb:14:in
populate\u items\u table' app/controllers/items\u controller.rb:67:in
reload'
测试/控制器/项目\u控制器\u测试.rb:53:in
block in' app/models/item.rb:14:in
populate\u items\u table'
app/controllers/items\u controller.rb:67:in
reload' 测试/控制器/项目\u控制器\u测试.rb:53:in'block in'


资产路径在模块ActionView::Helpers::AssetUrlHelper中定义。 使用

而不是

 include ActionView::Helpers
class项
如果我理解正确,如果函数不在类中,它将无法工作


不管怎样,您需要以这样一种方式包括ActionView::Helpers,即它到达asset_path调用,而它当前没有(因为它在类中被隔离,当前与您声明的函数在不同的范围内)。

我以前尝试过这一点,并获得了“ActionView::Template::Error:未定义的方法`errors',用于nil:NilClass”. 我认为,通过包含所有帮助程序,我更有可能包含更具体的模块所依赖的所有内容?可以为nil类粘贴错误的堆栈跟踪?我很抱歉,我立即做出了回应。ActionView::Template::Error与此无关,我曾尝试在其他领域取得进展,而此错误与尚未构建的内容有关。。。现在,我已经发布了模型代码测试的正确跟踪,它仍然报告未定义的\u方法。在ItemsController中的populate\u items\u表中包含ActionView::Helpers::AssetUrlHelper。默认情况下,它不会在控制器中混合。这就是为什么我将populate\u items\u表放在模型中,而不是控制器中。胖模型,瘦控制器。控制器只调用类方法。现在我很困惑。你是什么意思,如果我的函数不在类中,它就不能工作?它在Item类中,不是吗?这就是我包括助手的地方。我应该如何包括助手?我只是根据其他人提交的类似问题的例子。
 include ActionView::Helpers
class Item < ActiveRecord::Base
    include ActionView::Helpers
    validates :description, presence: true, length: { maximum: 240 }
    validates :category, presence: true
    has_many :interests
    has_many :members, through: :interests

    def populate_items_table
      from_file = asset_path("item_listing.ods")
      original_list = Openoffice.new(from_file)
      original_list.default_sheet = original_list.sheets.first
      headers = original_list.row(1)
      ...
    end

end