スプレッドシート ファイルからテーブルを「プリロード」するためのインターフェイスを提供しようとしています。簡単に聞こえますが、完全な初心者である私はそれを悪用しています。ファイルがアセットにプリコンパイルされた後、action_view ヘルパー asset_path を使用してファイルを見つけましたが、「NoMethodError: undefined method `asset_path' for #」を取得し続けるため、ヘルパーを適切に含めていないようです。ここに私のモデルコードがあります:
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
ここで私が間違っているところを誰かが指摘できれば、私は最も感謝しています。また、「Rails の方法」でこれを行っていますか? この種のコードは、モデルまたは別の場所に配置する必要がありますか? 私は別の場所を推測しています。そうでなければ、適切なヘルパーはおそらくすでに定義されているでしょうか?
ここのスタックには1などの同様の質問がありますが、答えは私がやっていることと何の違いもないようです。
@shishir: 提案された特定のモジュールを含めた場合のスタック トレースは次のとおりです。
ERROR["test_should_reload_items_table", ItemsControllerTest, 2016-03-22 08:43:53 +0000] test_should_reload_items_table#ItemsControllerTest (1458636233.20s) NoMethodError: NoMethodError: undefined method
asset_path' for #<ItemsController:0x000000097cb308> app/models/item.rb:14:in
populate_items_table' app/controllers/items_controller.rb:67:inreload' test/controllers/items_controller_test.rb:53:in
block in ' app/models/item.rb:14:inpopulate_items_table' app/controllers/items_controller.rb:67:in
reload' test/controllers/items_controller_test.rb:53:in `block in'