Rails:我如何只嵌套相关资源?

时间:2010-08-29 19:36:04

标签: ruby-on-rails

要在Rails中设置嵌套资源,我已经看到了这样的示例路由:

map.resources :players
map.resources :teams, :has_many => :players

通过这样做,您可以访问球队/ 1 /球员并查看列表。但它列出了所有玩家,而不仅仅是那些属于团队1的玩家。

如何仅列出与父资源关联的资源?

2 个答案:

答案 0 :(得分:3)

您需要先加载团队。通常的做法是在前过滤器中执行此操作。

class PlayersController < ActionController::Base
  before_filter :get_team

  def get_team
    @team = Team.find(params[:team_id])
  end

  def index
    @players = @team.players # add pagination, etc., if necessary
  end

  def show
    @player = @team.players.find(params[:id])
  end
end

请注意,上面的代码坚持要求您指定一个团队。如果您希望同一个控制器同时适用于两者,则需要稍微更改它(即检查params[:team_id])。

如果控制器逻辑很简单,你可以使用优秀的inherited_resources gem来干掉它。

答案 1 :(得分:0)

问题与map.resources和路由一般没什么关系。

请注意,框架不会神奇地提取玩家:某些控制器处理teams/1/players请求中有一些操作,并且您的代码会获取要显示的玩家列表。检查该行动(或在此处发布)应该有所帮助。