在Rails中为编辑表单中的集合中提取嵌套资源的id

时间:2015-09-09 08:40:02

标签: ruby-on-rails nested

我有两种模式:

class Team < ActiveRecord::Base
  belongs_to :scoreboard
end

class Scoreboard < ActiveRecord::Base
  has_many :teams
end

在记分板的显示页面上,我提供了以下内容:

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

链接到teams目录中的partial,它执行以下操作:

<%= 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视图页面上已存在一个表单,该表单创建一个新的团队对象并在团队控制器中调用团队#new方法和团队#create方法。这就是记分板#show方法中有一个@team变量的原因。

团队控制器中的编辑操作

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

现在这是我的问题。每次为每个团队生成一个div时,也会在该div旁边生成一个编辑按钮,该按钮将带您进入包含编辑该特定团队的表单的编辑视图。编辑链接中的 @scoreboard 会拉:scoreboard_id ,但似乎我们无法按顺序为每个团队提取:id 使编辑链接工作。每次,我们都会尝试访问记分板#show 的视图,我们收到以下错误:

没有路线匹配{:action =&gt;&#34;编辑&#34;,:controller =&gt;&#34;球队&#34;,:id =&gt; nil,:scoreboard_id =&gt; &#34; 7&#34;}缺少必需的密钥:[:id]

我们如何在div_for中为每个团队提取:id?

1 个答案:

答案 0 :(得分:0)

您很有可能将新初始化的团队与其他记分板团队一起通过。在渲染团队之前尝试拒绝新记录:

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