Ich versuche, eine Schnittstelle zum" Laden "einer Tabelle aus einer Arbeitsblattdatei bereitzustellen. Hört sich einfach an, aber ich mache schweres Wetter daraus, ein absoluter Neuling zu sein. Ich habe den action_view helfer asset_path verwendet, um die Datei zu finden, nachdem sie in Assets vorkompiliert wurde, aber es scheint, dass ich die Helfer nicht richtig einbeziehe, weil ich "NoMethodError: undefinierte Methode` asset_path 'für # "bekomme. Hier ist mein Modellcode:Rails: Roo im Modell verwenden, um eine Tabelle zu laden, erhalten: NoMethodError: undefinierte Methode `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
Ich wäre Ihnen sehr dankbar, wenn jemand kann darauf hinweisen, wo ich falsch hier werde. Tue ich das auch im "Rails way"? Sollte diese Art von Code im Modell oder anderswo sein? Ich rate mal woanders, sonst wären die passenden Helfer wohl schon definiert?
Es gibt ähnliche Fragen auf dem Stapel hier, z.B. 1, aber die Antworten scheinen nicht anders zu sein als das, was ich mache.
@shishir: hier ist der Stack-Trace, wenn einschließlich des spezifischen Modul wie vorgeschlagen:
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 '
Ich habe dies zuvor versucht, und "ActionView :: Template :: Fehler: undefinierte Methode' Fehler 'für Nil: NilClass ". Ich dachte mir, dass ich mit allen Helfern eher alles mit einschloss, von dem das spezifischere Modul abhing? – FBtLL
Kann die Stack-Trace für Fehler für Null-Klasse einfügen? – Shishir
Ich entschuldige mich, ich stürzte mich in diese Antwort. Der ActionView :: Template :: Fehler war nicht verwandt, ich hatte versucht, in anderen Bereichen Fortschritte zu machen, und dieser Fehler bezieht sich auf Sachen, die noch nicht gebaut wurden ... Ich habe jetzt die korrekte Spur aus dem Test des Modellcodes gepostet und meldet immer noch undefined_method. – FBtLL