【问题标题】:Rails: how can I nest only associated resources?Rails:我怎样才能只嵌套关联的资源?
【发布时间】:2010-08-29 19:36:04
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

    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 来干这个。

    【讨论】:

      【解决方案2】:

      这个问题与map.resources 和一般路由无关。

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

      【讨论】:

        猜你喜欢
        • 2021-11-05
        • 1970-01-01
        • 2016-08-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-02
        • 1970-01-01
        • 1970-01-01
        • 2012-08-23
        相关资源
        最近更新 更多