当使用/不使用self时调用本地方法的方式不同。为什么?

时间:2009-08-18 20:56:42

标签: ruby-on-rails ruby

我的模型名为User,与has_many的关系UserFilterUserFilterbelongs的关系User _。

在User模型中,我有一个名为update_user_filters(filter_params_array)

的方法

此方法会修改user_filters,就像这样

def update_user_filters(filter_params_array)
  new_filters = []
  old_filter = user_filters 

  filters_params_array.each do |filter_params|
    if filter_params[:id].blank? #if the filter does not yet exist
      new_filters << UserFilter.new(filter_params)
    end
  end
  user_filters = new_filters
end

这会将user_filters设置为预期值,但保存后不会更新数据库中的user_filters

但是,如果我将分配更改为以下内容,则确实如此。有人可以解释为什么会这样吗?

self.user_filters = new_filters

请注意,当我第一次在模型中引用user_filters时,会在数据库中执行select操作,因此我不确定此本地方法与selfself的工作方式不同

1 个答案:

答案 0 :(得分:6)

user_filters只是创建一个局部变量。 self.user_filters将其分配给对象。你可能想要@user_filters = ...