为什么没有使用attr_accessor在类上设置实例变量?

时间:2017-06-02 09:07:26

标签: ruby-on-rails ruby

我尝试使用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变量。

1 个答案:

答案 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的目的。为什么要生成一个编写器然后不使用它?