每个User has_one :family_tree。
因此,family_tree路由看起来就像一个普通的resources :family_trees。
我有一个看起来像这样的路由:
get "dashboard/my_tree" => "dashboard#my_tree", as: :my_tree, path: "/my_tree"我想要发生的是,每当有人访问family_tree/:my_id时,他们应该被重定向到/my_tree (或者只是显示URL路径)。请注意::my_id是属于current_user的family_tree的ID。
问题是我的FamilyTree#Show控制器操作看起来像这样:
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是这样的:
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’。
发布于 2015-03-07 12:51:42
# 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以及路由:
# config/routes.rb
My::Application.routes.draw do
resources :family_trees
resources :my_tree, only: :index
endhttps://stackoverflow.com/questions/28892746
复制相似问题