2017-06-02 81 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。我的天啊。我的天啊。我猜我今天早上醒来时会撞上我的头。 –

相关问题