在Rails中开发新手并且卡住了。我正在尝试将玩家对象的id作为参数传递给表单,以根据玩家ID和匹配ID创建匹配的可用性。用户拥有许多玩家,并且当登录时,current_user可以为其玩家提供匹配的可用性。
我正在将此表格称为匹配节目页面,并且正在传递的匹配ID(下面的错误中的4)导致错误。
Couldn't find Player with 'id'=4 [WHERE "players"."user_id" = ?]
我正在尝试使用render将player.id作为参数值传递给表单。
#/views/matches/show.html.erb
<% current_user.players.each do |player| %>
<tr>
<td><%= player.name %></td>
<td><%= render 'attend_form', :id => player.id %></td>
</tr>
然后使用播放器ID作为'attend_form'中的参数,就像这样。
#/views/matches/_attend_form.html.erb
<div id="attend_form">
<%= form_for (current_user.players.find(params[:id]).availabilities.new(match_id: @match.id)) do |f| %>
<div>
<%= f.hidden_field :match_id %>
<%= f.hidden_field :player_id, :value => params[:id] %>
<%= f.hidden_field :available, :value => TRUE %>
</div>
<%= f.submit "Attend" %>
<% end %>
</div>
提交后,应该在可用性控制器中调用create以创建匹配可用性。
#/views/matches/availabilities_controller.rb
def create
@availability = Availability.new(availability_params)
if @availability.save
flash[:success] = "You are now attending this match"
redirect_to :back
else
flash[:danger] = "Something went wrong"
redirect_to :back
end
end
玩家匹配和可用性之间的关系设置如下:
匹配
class Match < ActiveRecord::Base
has_many :availabilities
has_many :players, through: :availabilities
状况
class Availability < ActiveRecord::Base
belongs_to :player
belongs_to :match
播放器
class Player < ActiveRecord::Base
belongs_to :user
has_many :availabilities, :dependent => :destroy
has_many :matches, through: :availabilities
和用户
class User < ActiveRecord::Base
has_many :players
has_many :availabilities
非常感谢可以给予的任何帮助!就像我说的Rails开发新手一样。
答案 0 :(得分:0)
出现此错误是因为current_user
在DB中没有Player
且id == 4。首先,您需要检查此播放器是否属于用户,然后呈现表单。