【发布时间】:2010-08-29 19:36:04
【问题描述】:
为了在 Rails 中设置嵌套资源,我看到了这样的示例路由:
map.resources :players
map.resources :teams, :has_many => :players
通过这样做,您可以访问 teams/1/players 并查看列表。但它列出了所有球员,而不仅仅是属于第 1 队的球员。
如何仅列出与父资源关联的资源?
【问题讨论】:
标签: ruby-on-rails
为了在 Rails 中设置嵌套资源,我看到了这样的示例路由:
map.resources :players
map.resources :teams, :has_many => :players
通过这样做,您可以访问 teams/1/players 并查看列表。但它列出了所有球员,而不仅仅是属于第 1 队的球员。
如何仅列出与父资源关联的资源?
【问题讨论】:
标签: ruby-on-rails
您需要先加载团队。一种常见的做法是在前置过滤器中执行此操作。
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 来干这个。
【讨论】:
这个问题与map.resources 和一般路由无关。
请注意,框架不会神奇地获取玩家:在处理teams/1/players 请求的某些控制器中存在一些操作,并且您的代码会获取要显示的玩家列表。检查该操作(或在此处发布)应该会有所帮助。
【讨论】: