我尝试使用FileSearchable.new(current_user, params[:keyword]).call
调用现有的类,但我收到错误,undefined method 'where' for nil:NilClass
上的my_folders = my_folders.where("name ILIKE ?", filter) unless filter.blank?
课程在
之下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
变量。
答案 0 :(得分: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的目的。为什么要生成一个编写器然后不使用它?