0

私はこのコントローラーを持っています:

  def index
    @disclosures = Disclosure.where(:user_id => current_user.id)

    respond_to do |format|
      format.html{}
      format.js{}
    end

  end

StackOverflowの善良な人々の助けを借りて、HAMLに次のようなパーシャルをポイントさせることができるようになりました。

  = render :partial => "/influencers/disclosures/shared/list"

しかし、この部分的なスローと例外:

-if disclosures.empty?
  .alert.alert-info
    %p=(no_disclosures_message || (t "influencers.influencer_dashboard.disclosures.no_disclosures"))
%table.table.influencer-disclosures
  %tbody
    -disclosures.each do |disclosure|
      =render "influencers/disclosures/shared/row", :disclosure => disclosure

それを言って:

undefined local variable or method `disclosures' for #<#<Class:0x133ca8a58>:0x133ca25e0>

しかし、これはどのようになりますか?コントローラーでその開示オブジェクトを照会しました。なぜこれが起こっているのか、そしてそれを修正する方法はありますか?

ありがとう!!

4

1 に答える 1

4

開示の前に@を付ける必要があります。これは、コントローラーが変数をビューに渡す方法です。

-if @disclosures.empty?

-@disclosures.each do |disclosure|

アップデート

これを修正する別の方法は、レンダリング呼び出しを変更することです。これにより、同じパーシャルの他の呼び出しサイトとの下位互換性が確保されます。

render :partial => "/influencers/disclosures/shared/list", :locals => {:disclosures => @disclosures}
于 2012-04-24T21:16:28.350 に答える