2015-09-09 67 views
0

我有兩個型號:拉嵌套資源的ID集合中對於Rails的編輯形式

class Team < ActiveRecord::Base 
    belongs_to :scoreboard 
end 

class Scoreboard < ActiveRecord::Base 
    has_many :teams 
end 

顯示頁記分牌,我有呈現出以下內容:

<div class="all-teams"> 
    <%= render @scoreboard.teams %> 
</div> 

鏈接到團隊目錄中的部分目錄它具有以下功能:

<%= div_for team, :class => "team-list" do %> 
    <div class= "boxin1"><%= team.name %></div> 
    <div class= "boxin2"><%= team.win %></div> 
    <div class= "boxin2"><%= team.loss %></div> 
    <div class= "boxin2"><%= team.tie %></div> 
    <span class= "boxin3 btn btn-primary"><%= link_to "Edit", edit_scoreboard_team_path(@scoreboard, team.id) %> </span> 
    <span class= "boxin3 btn btn-primary">Del</span> 
<%end%> 

之前,我問我的問題,我會還爲有關行動顯示控制器的數據:

在記分牌控制器的show動作:

def show 
    @scoreboard = Scoreboard.find_by(params[:id]) 
    @team = @scoreboard.teams.build 
end 

重要注意事項 此記分板上已有一種表格#show view頁面,它可以創建一個新的團隊對象並調用團隊#new方法和團隊#在團隊控制器中創建方法。這就是爲什麼記分板#show方法中有一個@team變量。

隊中的控制器

def edit 
    @scoreboard = Scoreboard.find(params[:scoreboard_id]) 
    @team = @scoreboard.teams.find(params[:id]) 
end 

編輯動作現在,這是我的問題。每次爲每個團隊生成一個div時,在該div旁邊都會生成一個編輯按鈕,該按鈕將帶您到包含編輯該特定團隊的表單的編輯視圖。編輯鏈接中的@scoreboard拉動了:scoreboard_id很好,但似乎我們無法爲每個團隊拉動:id以使編輯鏈接起作用。每次,我們嘗試記分牌#顯示我們得到以下錯誤,以訪問視圖:

沒有路由匹配{:動作=>「編輯」,:控制器=>「團隊」,:ID =>零::scoreboard_id =>「7」}缺少必需的鍵:[:id]

我們該如何在div_for中爲每個團隊拉:id?

+0

「team」變量來自哪裏?這是部分的完整代碼嗎? – Pavan

回答

0

很好的機會,你會傳遞一個新初始化的團隊以及其他記分板團隊。嘗試在呈現您的球隊之前拒絕新記錄:

<div class="all-teams"> 
<%= render @scoreboard.teams.reject(&:new_record?) %> 
</div> 
+0

這工作。你能解釋一下它背後的概念嗎?我不完全明白它爲什麼起作用。 – kpaul

+0

你有'@ scoreboard.teams.new'在頁面的其他地方(可能是一種形式)。當你調用'@ scoreboard.teams.new'時,它會爲記分板隊添加一個新初始化的隊伍,並且當你將'@ scoreboard.teams'傳遞給渲染器時,新初始化的隊伍也會被傳遞,但是無法正確渲染,因爲它'還沒有一個ID。 – ddgd

+0

非常感謝。 – kpaul