我有两个模型,团队和玩家。在团队索引页面上,我有一个未分配给团队的玩家列表。我正在尝试制作一个按钮,以便我可以点击其中一个没有团队的玩家,并让该玩家的“编辑形式”显示在团队索引页面上。
这是我现在的团队#index:
= 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。有什么方法可以让我以某种方式工作吗?
答案 0 :(得分:1)
您可以从其他视图页面引用任何部分,这很好。但是,就像你的情况一样,如果你需要的部分需要一些实例变量(比如@player
),你必须要么:A)在团队的控制器中声明它,或者B)将它传递给部分
因此对于A),在您的团队控制器中进行操作index
,只需添加@player = Player.new
或您需要的任何内容。
对于B),请执行:
render:partial =&gt; “my_partial”,:locals =&gt; {:player =&gt; Player.new}