【问题标题】:Undefined local variables in Rails 3 partials after upgrade to Ruby 1.9.3升级到 Ruby 1.9.3 后 Rails 3 局部变量中未定义的局部变量
【发布时间】:2013-07-21 22:59:43
【问题描述】:

我知道有几篇关于这个问题的帖子,但我在这里阅读的解决方案都没有帮助。

我刚刚从 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]

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

我可以仍然解决这个问题,只是 user 的某些属性实际上是方法,我无法使用 user[:method] 访问这些属性。

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

有什么想法吗?会不会是 HAML 处理器?所有其他已解决的帖子都使用了 ERB。

【问题讨论】:

    标签: ruby-on-rails ruby-1.9.3 partials


    【解决方案1】:

    尝试使用这种方式渲染局部(Rails 3 的正确方式):

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

    并使用userextra_class 访问对象

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-29
    • 2013-04-29
    • 1970-01-01
    • 2016-08-23
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    相关资源
    最近更新 更多