首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将请求同时重定向到current_user和mask路由的记录?

如何将请求同时重定向到current_user和mask路由的记录?
EN

Stack Overflow用户
提问于 2015-03-06 13:16:33
回答 1查看 75关注 0票数 0

每个User has_one :family_tree

因此,family_tree路由看起来就像一个普通的resources :family_trees

我有一个看起来像这样的路由:

代码语言:javascript
运行
复制
  get "dashboard/my_tree" => "dashboard#my_tree", as: :my_tree, path: "/my_tree"

我想要发生的是,每当有人访问family_tree/:my_id时,他们应该被重定向到/my_tree (或者只是显示URL路径)。请注意::my_id是属于current_userfamily_tree的ID。

问题是我的FamilyTree#Show控制器操作看起来像这样:

代码语言:javascript
运行
复制
  def show
    @user = @family_tree.user
    @memberships = @family_tree.memberships
    @memberships_grouped_by_relations = @memberships.includes(user: :family_tree).group_by(&:relation)
    @nodes = @family_tree.nodes

    render "dashboard/my_tree"
  end

我的DashboardController#MyTree是这样的:

代码语言:javascript
运行
复制
  def my_tree
    @user = current_user
    @family_tree = @user.family_tree
    @memberships_grouped_by_relations = @family_tree.memberships.group_by(&:relation)    
  end

这两种方法都有效,但我只是不知道如何屏蔽family_tree/51的URL以重定向到my_tree。但是,很明显,我不希望所有对family_tree/:id的请求都显示/my_tree。例如,如果与current_user相关联的family_tree是id=51,那么当该用户转到family_tree/52时,该URL应该是‘family_tree/52’。

EN

回答 1

Stack Overflow用户

发布于 2015-03-07 12:51:42

代码语言:javascript
运行
复制
# app/controllers/family_trees_controller.rb
class FamilyTreesController < ApplicationController

  # family_tree GET    /family_trees/:id(.:format)
  #
  # @note !IMPORTANT
  #   Should only have 1 or 2 instance vars per action
  def show
    # @user = @family_tree.user #=> not needed, available on the primary instance var (@family_tree)
    if current_user == family_tree.user
      redirect_to my_tree_index_path
    else
      # @memberships = @family_tree.memberships
      # @memberships_grouped_by_relations #=> too long of a name!
      #                                       There is currently only one grouped membership,
      #                                       why not rename it to:
      @grouped_memberships = family_tree.memberships.includes(user: :family_tree).group_by(&:relation)
      # Shouldn't create another ivar if it's available on the primary ivar
      # @nodes = @family_tree.nodes
    end
  end

  protected

  def family_tree
    @family_tree ||= FamilyTree.find(params[:id])
  end
end

# app/controllers/my_trees_controller.rb
class MyTreesController < ApplicationController

  # my_tree_index GET    /my_tree(.:format)
  def index
    @grouped_memberships = current_user.family_tree.memberships.group_by(&:relation)
  end
end

以及路由:

代码语言:javascript
运行
复制
# config/routes.rb
My::Application.routes.draw do
  resources :family_trees
  resources :my_tree, only: :index
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28892746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档