2013-10-15 198 views
0

這已經被問了很多次了,但是在嘗試了所有可以找到的解決方案之後,我並沒有接近我自己的解決方案。傳遞局部變量到局部

我有一個部分,_form - 這裏的相關部分:

<% @tournament.sub_tournaments.each do |sub| %> 
    <%= f.fields_for :sub_tournaments, sub, :validate => false do |sub_form| %> 
    ... 
     <table> 
     ... 
     <tbody> 
     <%= sub_form.fields_for :standings, :validate => false do |standings| %> 
      <%= render 'tournaments/form_partials/standing_fields', f: standings, sub: sub %> #here's the problem 
     <% end %> 
     </tbody> 
     </table> 
     ... 
    <% end %> 
<% end %> 

在標記線,我試圖兩個變量傳遞給定的部分 - f: standingssub: sub。如果我通過只f: standings,頁面加載罰款,但是當我添加sub: sub,我得到以下錯誤:

undefined local variable or method `sub' 

這是參照下面標線的_standing_fields部分:

<tr> 
    <td><%= f.hidden_field :_destroy %><%= f.text_field :standing, :class => "standing", readonly: true, :type => "" %></td> 
    <% if Game::TEAM_GAMES.include? sub.game.name %> #here's the problem 
    <td><%= f.grouped_collection_select(:team_division_id, Team.order(:name).includes(:team_divisions), :team_divisions, :name, :id, :game_name, include_blank: true)%></td> 
    <% else %> 
    <td><%= f.grouped_collection_select(:player_id, Player.order(:name).includes(:player), :player, :name, :id, :game_name, include_blank: true)%></td> 
    <% end %> 
    <td><span class="remove">Remove</span></td> 
</tr> 

我無法想象發生了什麼問題,我已經三重檢查了語法,拼寫,逗號等,並重新啓動了我的redis服務器和rails服務器,正如一個解決方案所建議的。

回答

1

你必須把這些變量在當地人鍵:

<%= render 'tournaments/form_partials/standing_fields', locals: {f: standings, sub: sub} %> 
+0

這不是它 - 必須有一些事,那就是引發這一點,因爲如果我在'_form'註釋掉這行,我是仍然得到錯誤。無論如何 - 爲什麼'本地人的鑰匙?我已經提交了多個變量到一個沒有它在其他情況下的部分,它的工作好嗎..? – dax

+0

發現錯誤,這是一個完全不同的古怪的事情 - 雖然你的回答對我問的問題是正確的。如果你知道當地人鑰匙的必要性,請告訴我! – dax