2017-06-02 80 views
0

我試着用FileSearchable.new(current_user, params[:keyword]).call調用現有的類,但我得到的錯誤,undefined method 'where' for nil:NilClassmy_folders = my_folders.where("name ILIKE ?", filter) unless filter.blank?爲什麼不使用attr_accessor在類上設置實例變量?

類低於

class FileSearchable 

    attr_accessor :user, :my_files, :my_folders, :shared_folders, :shared_files, :filter 

    def initialize(user, filter) 
    @user = user 
    @my_folders = user.folders 
    @my_files = user.user_documents 
    @shared_folders = user.shared_folders 
    @shared_files = user.user_documents 
    @filter = filter 
    end 

    def apply_search_params 
    my_folders = my_folders.where("name ILIKE ?", filter) unless filter.blank? 
    end 
end 

我不知道爲什麼my_folders變量沒有被設置。

回答

2

這是一個很常見的問題。您創建一個局部變量my_folders,這會影響您的訪問者。顯式調用方法:

def apply_search_params 
    self.my_folders = my_folders.where("name ILIKE ?", filter) unless filter.blank? 
    end 

或者直接指定實例VAR(如你在初始化做)

def apply_search_params 
    @my_folders = my_folders.where("name ILIKE ?", filter) unless filter.blank? 
    end 

但是這個有點違背attr_accessor的目的。爲什麼生成一個作家,然後不使用它?

+0

omg。我的天啊。我的天啊。我猜我今天早上醒來時會撞上我的頭。 –

相關問題