每个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
。请注意::my_id
是属于family_tree
的{{1}}的ID。
问题是我的current_user
控制器操作如下所示:
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
。但是,显然,我不希望my_tree
的所有请求都显示family_tree/:id
。例如。如果与/my_tree
相关联的family_tree为current_user
,则当该用户转到id=51
时,该网址应为'family_tree / 52`。
答案 0 :(得分:0)
# 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
end