【问题标题】:Ensure that the controller's request is valid?确保控制器的请求有效?
【发布时间】:2011-09-11 07:14:48
【问题描述】:

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

在我的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

但这会涉及代码重复......所以我真的缺少一些非常简单的东西吗?

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 我知道这一定很简单。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多