2014-03-04 96 views
-2

我有這個方法在我application_controller.rb未定義的方法`save_item」對於上述ItemsController:類(NoMethodError)

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    def save_item(asin, domain, user_id) 
    ... 
    end 
end 

&當我嘗試通過軌道亞軍調用它在items_controller.rb 'ItemsController.rss'

def self.rss 
    self.save_item(@item_registration.asin, @item_registration.domain, @item_registration.user_id) 
    ... 
    end 

我得到這個錯誤

.rvm/gems/[email protected]/gems/railties-3.2.13/lib/rails/commands/runner.rb:53:in EVAL':未定義的方法save_item' for ItemsController:Class (NoMethodError)

我也試過

Application.save_item(@item_registration.asin, @item_registration.domain, @item_registration.user_id) & ApplicationController... & just save_item(@item_registration.asin, @item_registration.domain, @item_registration.user_id) 

&它在不言法的工作,但不能與SELF.some_method

+1

您無法從類方法調用實例方法。保存對象也不是控制器的責任。 – sevenseacat

+0

我可以在其他控制器中調用它。像在控制器類別控制器.rb def創建 save_item(@ item_registration.asin,@ item_registration.domain,@ item_registration.user_id) ... – whitesiroi

+0

因爲這是一個實例方法,而不是類方法。 – sevenseacat

回答

1
def self.rss 
    self.save_item(@item_registration.asin, @item_registration.domain,  @item_registration.user_id) 
    ... 
end 

是一個類的方法。 self.save_item中的自己被轉化爲類ApplicationController,而不是ApplicationController的實例。

save_itemApplicationController的實例方法。該方法的接收方應該是ApplicationController的實例,因此不能是ApplicationController

+0

謝謝隊友的解釋:) – whitesiroi

相關問題