2011-11-30 78 views
1

我有兩個模型,團隊和玩家。在球隊索引頁面我有一個沒有分配給球隊的球員名單。我試圖製作一個按鈕,以便我可以點擊其中一個沒有球隊的球員,並讓球員的「編輯表格」顯示在球隊索引頁面上。在另一個'索引視圖'中渲染一個模型'編輯表'

這是我目前的團隊#指數:

= link_to 'New Team', new_team_path 
= link_to 'New Player', new_player_path 

#teamLists 
    - @teams.each do |team| 
    .team 
     .teamtitle 
     .teamname 
      = link_to truncate(team.name, length: 18), edit_team_path(team) 
     .teammoney 
      = number_to_currency(team.adjust_money, precision: 0) 
     %table 
     %tr.tableheading 
      %th.namecolumn Player 
      %th.poscolumn Pos 
      %th.pricecolumn $ 
     -team.players.each do |player| 
      %tr 
      %td.namecolumn= player.name 
      %td.poscolumn= player.position 
      %td.pricecolumn= player.price 
     -(1..(10-team.players.length)).each do |x| 
      %tr 
      %td --- 
=render template: 'players/edit' 
=render 'players/playerlist' 

,這是我的球員#編輯

%h1 Nominated Player 
= render 'players/form' 

= link_to 'Show', @player 
= link_to 'Back', players_path 

和球員/形式

<%= form_for(@player) do |f| %> 
    <% if @player.errors.any? %> 
     <div id="error_explanation"> 
     <h2><%= pluralize(@player.errors.count, "error") %> prohibited this player from being saved:</h2> 
     <ul> 
     <% @player.errors.full_messages.each do |msg| %> 
      <li><%= msg %></li> 
     <% end %> 
     </ul> 
     </div> 
    <% end %> 

    <div class="field"> 
     <%= f.label :name %><br /> 
     <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
     <%= f.label :position %><br /> 
     <%= f.text_field :position %> 
    </div> 
    <div class="field"> 
     <%= f.label :price %><br /> 
     <%= f.number_field :price %> 
    </div> 
    <div class="field"> 
     <%= f.label :team_id %><br /> 
     <%= f.select :team_id, Team.all.map { |team| [team.name, team.id] }, { :include_blank =>  true } %> 
    </div> 
    <div class="actions"> 
     <%= f.submit %> 
    </div> 
    <% end %> 

目前,我得到這個錯誤'未定義的方法'model_name'爲NilClass:Class'我認爲它是因爲表單不能訪問@player,它是d在玩家編輯動作中定義。有沒有辦法讓這個工作以某種方式工作?

回答

1

你可以引用任何部分從另一個視圖頁,這很好。但是,就像你的情況一樣,如果你需要的部分需要一些實例變量(如@player),你必須:A)在團隊控制器中聲明它,或者B)將它傳遞給部分。

因此對於A),在您的團隊控制器中採取行動index,只需添加@player = Player.new或任何您需要的東西即可。

對於B),這樣做:

渲染:部分=> 「my_partial」:當地人=> {:玩家=> Player.new}

+1

怎麼樣,如果我需要@player = player.find (params [:id]),但在索引頁上沒有參數? – AFraser

+0

如果你無法知道它是哪個玩家,你必須在某處添加它。你有一個沒有團隊的球員列表,所以當你建立鏈接時,你可以在鏈接上添加類似隱藏字段或特殊ID的ID和球員ID。然後當你渲染partial時,從鏈接中獲取ID,並在我的響應中使用計劃B)傳遞'Player.find(the_id)'。 – MrDanA

相關問題