2017-05-09 44 views
0

我有使用參數可見性的問題函數find_agency可見:params爲不以某種西納特拉輔助功能

代碼:

需要 '西納特拉/基地'

module Sinatra 
    module AgencyRightsHelper 
    def self.find_agency 
     @agency = nil 
     if !params[:agency_id].nil? then 
     @agency = Agency.find(params[:agency_id]) and return 
     end 
    end 

def before_get_agency rights_params 
    AgencyRightsHelper::find_agency 
end 
    end 
    helpers AgencyRightsHelper 
end 

錯誤:

在不使用自己,但我
2017-05-10 00:01:26 - NoMethodError - undefined method `params' for Sinatra::AgencyRightsHelper:Module: 
    /Users/dali/perso/spacieux-be/app/helpers/agency_rights_helper.rb:18:in `before_get_agency' 
    /Users/dali/perso/spacieux-be/app/helpers/rights_helper.rb:61:in `before_action' 

params爲在其他助手的功能可見感覺有義務使用它在幫手中重新使用一個函數。

回答

0

find_agency是一個類的方法意味着它不會訪問屬性和特定實例的方法,所以你將無法訪問西納特拉應用類的給定實例的params(見(Ruby,Rails) Context of SELF in modules and libraries...?)。相反,你可以創建這樣一個模塊:

module AgencyRightsHelper 
    def find_agency 
    @agency = Agency.find(params[:agency_id]) if params[:agency_id].present? 
    end 
end 

然後,您可以如用這種方法在Sinatra Application類的before塊中。

+0

這是我的原始代碼,但我不能在同一個助手本身使用助手函數。它找不到該功能。 – Charmi

+0

我不確定我是否理解正確,但是您可以輕鬆地將另一個函數添加到'AgencyRightsHelper'並從'find_agency'中調用它。你能告訴我你的完整的Sinatra App類代碼嗎? – xlts