【问题标题】:Pulling the id of a nested resource in a collection for the edit form in Rails在Rails中为编辑表单提取集合中嵌套资源的ID
【发布时间】:2015-09-09 08:40:02
【问题描述】:

我有两个模型:

class Team < ActiveRecord::Base
  belongs_to :scoreboard
end

class Scoreboard < ActiveRecord::Base
  has_many :teams
end

在记分牌的show页面上,我渲染了以下内容:

<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%>

在我提出问题之前,我还将显示相关操作的控制器数据:

记分牌控制器中的显示动作:

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

重要提示 这个 scoreboard#show 视图页面上已经存在一个表单,它创建一个新的团队对象并调用团队控制器中的 team#new 方法和 team#create 方法。这就是 scoreboard#show 方法中有一个 @team 变量的原因。

团队控制器中的编辑操作

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

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

没有路线匹配 {:action=>"edit", :controller=>"teams", :id=>nil, :scoreboard_id=>"7"} 缺少必需的键:[:id]强>

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

【问题讨论】:

  • team 变量从何而来?这是部分的完整代码吗?

标签: ruby-on-rails nested


【解决方案1】:

您很有可能会与其他记分牌团队一起通过新初始化的团队。在呈现您的团队之前尝试拒绝新记录:

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

【讨论】:

  • 这行得通。你能解释一下它背后的概念吗?我不完全明白它为什么会起作用。
  • 你在页面的其他地方有@scoreboard.teams.new(可能在一个表单中)。当您调用 @scoreboard.teams.new 时,它会将一个新初始化的团队添加到记分板团队中,并且当您将 @scoreboard.teams 传递给渲染时,新初始化的团队也会通过但无法正确渲染,因为它还没有 id。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
相关资源
最近更新 更多