Rails: как я могу вкладывать только связанные ресурсы? - PullRequest
0 голосов
/ 29 августа 2010

Чтобы настроить вложенные ресурсы в Rails, я видел примеры таких маршрутов:

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

Делая это, вы можете посетить команды / 1 / игроков и увидеть список. Но в нем перечислены все игроки, а не только те, которые принадлежат к команде 1.

Как я могу перечислить только ресурсы, связанные с родительским ресурсом?

Ответы [ 2 ]

3 голосов
/ 29 августа 2010

Сначала нужно загрузить команду.Обычная практика заключается в том, чтобы сделать это в фильтре до.

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, чтобы высушить его, если логика контроллера проста.

0 голосов
/ 29 августа 2010

Проблема имеет мало общего с map.resources и маршрутизацией в целом.

Обратите внимание, что фреймворк волшебным образом не выбирает игроков: в каком-то контроллере есть какое-то действие, обрабатывающее запрос teams/1/players, и ваш код выбирает список игроков для показа.Изучение этого действия (или публикация здесь) должно помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...