在我的应用中,我有[例如]三个控制器:groups
,forums
和discussions
。
在我的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
但是这会涉及代码重复......所以有什么东西真的很简单吗?
由于
答案 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。但是,如果用户不属于该组,则应拒绝访问。