2013-07-30 2 views
0

Я обновил проект с ree-1.8.7 до 1.9.2p429.Определить текущее поведение пользователя после обновления до ruby ​​1.9.3

У меня есть атрибут в моей модели, названной silhouette_user_id. Во взглядах и иногда в моем рубинового коде, называя

current_user.silhouette_user_id 

возвращает значение, отличное (и неправильно), чем

current_user[:silhouette_user_id] 

который возвращает правильное значение.

Хотя я мог бы найти и заменить, чтобы исправить это, я беспокоюсь, что другие атрибуты будут вести себя одинаково. Это БОЛЬШОЙ проект, и мне действительно нужно определить, почему это происходит.

Любые идеи были бы весьма признательны.

+0

Что это значит «НЕПРАВИЛЬНО». Это из-за синего идентификатора, какой-то другой идентификатор или что? Нет никакой магии, поэтому для этого должна быть причина. –

+0

Да, он возвращает другой идентификатор. Не совсем случайный. Идентификатор другого пользовательского объекта (например, @user) из того же сеанса. Какой идентификатор зависит от отображаемой страницы. Например, представление пользователей, которое отображает силуэт_user_id = 100 (например), поскольку последний пользователь в представлении приводит к тому, что current_user.silhouette_user_id получает 100! Я думаю, если бы мы сосредоточились на различии между тем, как извлекается атрибут модели ActiveRecord при использовании. нотация по отношению к хешу [], это могло бы получить меня где-нибудь. – DSadaka

+0

Что вы подразумеваете под «другим пользовательским объектом (например, @user) из того же сеанса»? –

ответ

0

Я решил эту проблему. Во время обновления я попытался обновить, как я определял новые методы для класса User. К сожалению, я сделал это неправильно. Я использовал

def define_new_method(key, value) 
    self.class.send(:define_method, key.to_sym) do 
     value 
    end 
    end 

, который фактически изменил методы для пользователя CLASS, а не экземпляр, для которого он предназначался. Изменение этого:

def define_new_method(key, value) 
    define_singleton_method key.to_sym, lambda { value } 
    end 

привел к новым методам определяются только для экземпляра, предназначенного и не для экземпляра current_user.

Смежные вопросы