0

この問題に関する投稿がいくつかあることは知っていますが、ここで読んだ解決策はありません。

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 ハッシュを介してローカルにアクセスできるため、これらの行を先頭に追加すると、アクセスできます。

  • ユーザー = local_assigns[:ユーザー]
  • extra_class = local_assigns[:extra_class]

私はそれで暮らすことができました。しかし、それは悪化します。user は ActiveRecord モデル オブジェクトです。ただし、user.attribute 表記を使用してこのオブジェクトの属性にアクセスすることはできません。代わりに、user[:attribute] を使用する必要があります。

ユーザーの属性の一部が実際にはメソッドであり、user[:method] を使用してアクセスできないことを除いて、これでうまくいく可能性があり ます

3.1.12 だった Rails かもしれないと思ったので、変更せずに 3.2.13 にアップグレードしました。

何か案は?HAML プロセッサでしょうか。解決された他のすべての投稿はERBを使用しました。

4

1 に答える 1

1

この方法でパーシャルをレンダリングしてみてください (Rails 3 では正しい方法です)。

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

userおよび を使用したオブジェクトへのアクセスextra_class

于 2013-07-21T23:09:59.617 に答える