2013-07-21 2 views
0

Я знаю, что есть несколько сообщений по этой проблеме, но ни одно из рассмотренных мной решений не помогает.Неопределенные локальные переменные в Rails 3 частичных после обновления до Ruby 1.9.3

Я только что обновил с Ruby 1.8.7 до 1.9.3p429, и теперь я получаю неопределенную локальную переменную в своих частицах.

Я зову частичный (от частичного в случае, если релевантно) таким образом:

= render :partial => 'user_name', :locals => {:user => item_user, :extra_class => "active"} 

В парциальном я получить доступ к этим местным жителям таким образом:

- if(current_user and user.silhouette_user_id.to_i == current_user.silhouette_user_id) 
    = notranslate(current_user.full_name) 
- else 
    - if !local_assigns[:extra_class].nil? 
     = notranslate(link_to(h(user.full_name), stream_url(:user_id => user.silhouette_user_id), :class => extra_class)) rescue "Anonymous" 
    - else 
     = notranslate(link_to(h(user.full_name), stream_url(:user_id => user.silhouette_user_id))) rescue "Anonymous" 
    = notranslate(link_to "Pro", "#", :class => "badge badge-pro", :title => "#{user.part_name} is pro") if SSO.is_pro? user 

я могу получить доступ к местным жителям с помощью local_assigns hash, поэтому, если я добавлю эти строки в начало страницы, у меня есть доступ:

  • user = local_assigns [: user]
  • extra_class = local_assigns [: extra_class]

Я мог бы жить с этим. Однако ухудшается. user - объект модели ActiveRecord. Однако я не могу получить доступ к атрибутам этого объекта с помощью нотации user.attribute. Вместо этого у меня есть пользователь user [: attribute].

Я мог бы по-прежнему получить это, за исключением того, что некоторые атрибуты пользователя на самом деле являются методами, с которыми я не могу получить доступ, используя user [: method].

Я думал, что это может быть Rails, что было в 3.1.12, поэтому я обновился до 3.2.13 без каких-либо изменений.

Любые идеи? Может ли это быть процессором HAML? Все остальные сообщения, которые были решены, использовались ERB.

ответ

1

Попробуйте использовать этот способ для визуализации партиалы (это правильный путь для Rails 3):

= render 'user_name', user: item_user, extra_class: "active" 

и доступ к объектам с использованием user и extra_class

+0

Я попробовал. Не повезло. – DSadaka

+0

У кого-то еще эта проблема? – DSadaka

+0

Я решил эту проблему. Это было вызвано моими пользовательскими define_new_methods для пользователя. c.f. http://stackoverflow.com/questions/17941607/devise-current-user-weird-behavior-after-upgrade-to-ruby-1-9-3/17985434#17985434 – DSadaka