要在Rails中设置嵌套资源,我已经看到了这样的示例路由:
map.resources :players
map.resources :teams, :has_many => :players
通过这样做,您可以访问球队/ 1 /球员并查看列表。但它列出了所有玩家,而不仅仅是那些属于团队1的玩家。
如何仅列出与父资源关联的资源?
答案 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
请求中有一些操作,并且您的代码会获取要显示的玩家列表。检查该行动(或在此处发布)应该有所帮助。