2013-07-21 37 views
0

我知道在这个问题上有几个帖子,但是我没有读过这里的解决方案。升级到Ruby 1.9.3后Rails 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散列,所以如果我将这些行添加到顶端,我有权访问:

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

我可以忍受的。但是,情况变得更糟。用户是一个ActiveRecord模型对象。然而,我不能用user.attribute表示法访问这个对象的属性。相反,我必须用户用户[:属性]。

我可以仍然除此之外,用户的某些属性实际上是方法,我不能使用user [:method]访问。

我以为它可能是3.1.12的Rails,所以我升级到3.2.13没有任何变化。

任何想法?它可能是HAML处理器吗?所有其他已解决的帖子都使用了ERB。

回答

1

尝试使用这种方式进行渲染的谐音(它是Rails的正确方法3):

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

并获得使用userextra_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

相关问题