我正在开发我的第一个RoR应用程序并发现自己一遍又一遍地重新键入一些相同的代码......当然我做错了!我的应用程序有两种不同的用户类型(投资者和企业家),我经常发现自己在我的控制器中写这个:
def index
if current_user.user_type == "investor"
render "investor"
else
render "entrepreneur"
end
end
然后我对我的投资者有一个看法,对我的企业家有一个单独的看法。虽然这有效,但我知道有更好的方法!有人可以赐教我吗?
答案 0 :(得分:0)
使其成为应用程序控制器中的辅助方法。
def user_role
current_user.user_type
end
helper_method :user_role
此方法将返回“投资者”或“企业家” 通过制作辅助方法,您可以在控制器,助手,视图中随处使用它。
答案 1 :(得分:0)
如果您需要跨多个控制器,那么只需在application_controller.rb中创建一个新方法
您可以在application_controller.rb
中定义这样的方法def user_type?(user)
return user.user_type.to_s
end
并切换您的控制器方法以便将其用作
def index
render user_type?(current_user)
end
但就此而言;如果你的用例很简单,为什么不直接在你的控制器方法中这样做?
def index
render current_user.user_type.to_s
end
编辑以回答后续问题
如果您查看Rails指南http://guides.rubyonrails.org/layouts_and_rendering.html“在运行时选择布局”部分,他们几乎可以按照此处概述的相同方式处理此问题。
如果不同的用户类型看到2个真正不同的页面,那么这就是要走的路;保持控制器或application_controller中的逻辑。
但是,如果您的两种用户类型看到的内容完全相同,但差异很小,或者页面的特定部分,那么无论用户类型如何,您都可能希望始终呈现相同的视图。然后,您可以检查然后组成多个部分的视图,以根据用户引入正确的部分。您的“逻辑代码”应尽可能远离视图,因此在这种情况下,您可能希望将此与位于/ app / helpers的辅助方法相结合。 /app/helpers/application_helper.rb中定义的方法可供所有视图使用。您还可以在/app/helpers/controller_name_helper.rb中创建特定于控制器的视图助手方法