确保控制器的请求有效?

时间:2011-06-08 23:23:32

标签: ruby-on-rails ruby-on-rails-3 model-view-controller controllers

在我的应用中,我有[例如]三个控制器:groupsforumsdiscussions

在我的discussions_controller.rb

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

因此,例如,网址/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 个答案:

答案 0 :(得分:1)

假设你的意思是/ groups / 1 / forums / 1 / discussion呈现与/ groups / 2 / forums / 1 / discussion相同的内容(即在两个url中指定forum_id),那么你可以尝试以下方法:

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

如果您尝试访问错误组的论坛,那么应该抛出ActiveRecord :: RecordNotFound。但是,如果用户不属于该组,则应拒绝访问。