0

このブロックのエントリをカウントしたいです。rubyブロックの変数スコープのため、このコードを処理しません。これを修正する方法はありますか?

    arr_showcase.each do |entry|
          @entry = ContestEntry.find_by_id(entry)
          if @entry.view_in_showcase == true
            @entry.view_in_showcase = false
            @entry.save
            entry_added_showcase += 1 
          else
            @entry.view_in_showcase = true
            @entry.save
            entry_removed_showcase += 1 
          end
    end
    redirect_to :back, :notice => "#{entry_added_showcase} Desings added, #{entry_removed_showcase} Designs removed."
4

2 に答える 2

1

とをどこで宣言しましたentry_added_showcaseentry_removed_showcase?ブロックの外でそれらを初期化する必要があります。

entry_added_showcase = entry_removed_showcase = 0
arr_showcase.each do |entry|
      @entry = ContestEntry.find_by_id(entry)
      if @entry.view_in_showcase == true
        @entry.view_in_showcase = false
        @entry.save
        entry_added_showcase += 1 
      else
        @entry.view_in_showcase = true
        @entry.save
        entry_removed_showcase += 1 
      end
end
redirect_to :back, :notice => "#{entry_added_showcase} Desings added, #{entry_removed_showcase} Designs removed."
于 2013-01-30T00:51:03.643 に答える
0

次のように、ブロックのスコープ外で変数を定義する必要があります。

entry_added_showcase = 0
entry_removed_showcase = 0
arr_showcase.each do |entry|
      @entry = ContestEntry.find_by_id(entry)
      if @entry.view_in_showcase == true
        @entry.view_in_showcase = false
        @entry.save
        entry_added_showcase += 1 
      else
        @entry.view_in_showcase = true
        @entry.save
        entry_removed_showcase += 1 
      end
end
redirect_to :back, :notice => "#{entry_added_showcase} Desings added, #{entry_removed_showcase} Designs removed."
于 2013-01-30T00:51:38.767 に答える