假设我有两种型号:Team - 1 --- n - >播放机 用语言:一个团队可以有很多玩家。玩家属于团队。
在显示Team-Data的页面上,我想放置一个链接'create Player'。
在Players控制器中,如何创建播放器以使其与团队相关联,查看放置“创建播放器”链接的位置?
我必须
1。将Team-ID传递给“创建玩家”控制器并
2。使用Team-ID查找团队,然后
3。类似这样的内容:@new_player = @team.players.build(...)
我可以使用其中一条资源路线作为“创建播放器”链接吗?
答案 0 :(得分:2)
如果团队和球员将通过单独的表格添加:
您可以在新玩家的表单中包含team_id,也可以将路线嵌套到团队范围内的玩家中,并从params[:team_id]
等网址参数中拉出team_id。
嵌套玩家路线:
resources :teams do
resources :players
end
在您的团队/节目视图(团队详细信息页面)中,创建播放器链接:
<%= link_to 'Create Player', new_team_player_path(@team) %>
在球员形式中:
<% form_for [@team, @player] do |f| %>
<!-- your form here -->
<%- end -%>
在玩家控制器中:
def new
@team = Team.find params[:team_id]
@player = Player.new
end
def create
@player = Player.new params[:player]
@player.team_id = params[:team_id] # => if just grabbing the id from the url params
if @player.save
# flash and redirect
else
# show form again
end
end
否则,请参阅有关@Antoine提到的嵌套属性的railscast,以便在一个表单上指定新的团队和玩家详细信息。 (我认为你正在寻找的是有两种形式的第一种选择,但我可能会离开。)
有关嵌套资源路由的详细信息,请参阅Rails Routing Guide。要查看应用程序中可用的路由,请从应用程序根目录的命令行运行rake routes
。
答案 1 :(得分:1)
我认为nested_attributes可以帮助你。
观看this关于它的railscast。