2012-01-12 83 views
0

假设我有两个模型:Team --1 --- n - > Player 言辞:一个团队可以有很多玩家。玩家属于团队。我如何在Rails/Active Record中保存关联对象

在显示团队数据的页面上,我要放置一个链接“创建播放器”。

在播放器控制器中,如何创建播放器以使其与团队相关联,查看“创建播放器”链接的位置?

我必须

通过团队-ID为“创建选手”控制器和

2.查询使用工作组-ID,然后

团队

是这样的:@new_player = @team.players.build(...)

我可以使用资源的路线FO之一r'创建玩家'链接?

回答

1

我认为nested_attributes可以帮助你。

手表this关于它的railscast。

+0

谢谢! 我欣赏这个提示! – 2012-01-13 06:25:38

2

如果球队和球员将通过单独的形式添加:

您可以在表单中的新播放器或窝在球队的范围,玩家路线TEAM_ID并从URL拉TEAM_ID params像params[: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

+0

非常感谢您的帮助! 在这样一个初学者问题上找到一个提示是令人惊讶的很难:-) 在运行Goggles服务器热点后,我也发现这个教程网站 [ruby-rails-3-model-1-many-association](http:///jonathanhui.com/ruby-rails-3-model-1-many-association) 该网站上有很多好东西。可能对其他新手有用... 但是,无论如何,比你非常! – 2012-01-13 06:19:25

相关问题