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

我有一个名为User模型,与UserFilter有一个has_many关系。 UserFilterUser具有belongs _to的关系。

在User模型中,我有一个名为update_user_filters(filter_params_array)的方法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 ,但在保存时不会更新db中的user_filters

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

 self.user_filters = new_filters 

请注意,当我第一次在模型中引用user_filters ,会在db中执行select操作,因此我不确定此本地方法如何与self和不使用self

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