Local methods act differently when called with / without themselves. What for?

I have a model called User with the has_many relation to UserFilter . UserFilter is related to User .

Within the User model, I have a method called update_user_filters(filter_params_array)

This method modifies user_filters somehow like this

 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 

Sets user_filters expected value, but when saving it does not update user_filters in db.

however, if I change the assignment to the following, this will happen. Can someone explain why this is?

 self.user_filters = new_filters 

Note that when I first refer to user_filters , the model has a choice in db, so I'm not sure how this local method works differently with self and without self

0
ruby ruby-on-rails
Aug 18 '09 at 20:56
source share
1 answer

user_filters just creates a local variable. self.user_filters assigns it to an object. you probably want @user_filters = ...

+6
Aug 18 '09 at 20:58
source share



All Articles