Убедитесь, что запрос контроллера действителен? - PullRequest
0 голосов
/ 09 июня 2011

В моем приложении [например] три контроллера: groups, forums и discussions.

По моему discussions_controller.rb:

def index
  @group = Group.find(params[:group_id])
  @forum = Forum.find(params[:forum_id])
  @discussions = @forum.discussions
  ...
end

Так, например, URL /groups/1/forums/1/discussions отображает ту же страницу, что и /groups/2/forums/discussions. Значит ли это, что в моих контроллерах мне нужно будет добавить что-то вроде if @group.forums.to_a.include?(@forum)? Это кажется грязным и не рельсы. Я думаю, я мог бы также создать приватный метод, такой как:

def has_forum
  deny_access unless @group.forums.to_a.include?(@forum)
end

Но это будет связано с дублированием кода ... так что, я упускаю что-то действительно простое?

Спасибо

1 Ответ

1 голос
/ 09 июня 2011

Предполагая, что вы имели в виду, что / groups / 1 / forums / 1 / Discussions отображает то же содержимое, что и / groups / 2 / forums / 1 / Discussions (то есть, указав forum_id в обоих URL-адресах), вы можете попробовать следующее:

def index
  @group = Group.find(params[:group_id]
  @forum = @group.forums.find(params[:forum_id])
  @discussions = @forum.discussions
  ...
end

Это должно выдать ActiveRecord :: RecordNotFound, если вы попытаетесь получить доступ к форуму для неправильной группы. Однако вам следует запретить доступ, если пользователь не входит в группу.

...