我有一个专栏' created_by'在一张桌子里。根据登录用户的角色,我必须显示用户的id或用户的角色。假设登录用户的ID是客户,并且记录是由具有支持角色的用户创建的,那么它应该显示“支持”,如果支持登录则显示添加者的ID (即使它是一个不同的支持者的身份)。我可以弄清楚当前用户的角色。如何在不定义基于角色的单独api的情况下实现此目的?是否可以使用相同的API来根据查询从db获取结果,但是可以根据角色转换列。
答案 0 :(得分:1)
我最初的想法是创建一个view helper。
我会告诉你它的外观。由于您没有在问题中分享模型的名称,因此我选择了与用户具有created_by关系的任意模型(西瓜)。我意识到这是一个愚蠢的选择。我是一个谜......
应用/助手/ watermelons_helper.rb 强>
module WatermelonsHelper
def created_by_based_on_role(watermelon)
if current_user.role == "Support" || watermelon.created_by.role == "Generic User"
watermelon.created_by.name
else
"The Watermelons.com Support Team"
end
end
end
应用/控制器/ watermelons_controller.rb 强>
class WatermelonsController < Application Controller
def show
@watermelon = Watermelon.find(params[:watermelon_id])
end
end
应用/视图/西瓜/ show.html.erb 强>
...
<p>This watermelon was created by <%= created_by_based_on_role(@watermelon) %></p>
...
我之所以将其作为辅助方法而不是western.rb模型中的方法的原因是该方法依赖于current_user,模型每次都无法明确知道(假设您正在使用Devise或手动滚动的Hartl风格的current_user辅助方法。
编辑:根据反馈,让它成为一种模范方法......
应用/模型/ watermelons.rb 强>
class Watermelon < ActiveRecord::Base
...
def created_by_based_on_role(viewing_user)
if viewing_user.role == "Support" || self.created_by.role == "Generic User"
self.created_by.name
else
"The Watermelons.com Support Team"
end
end
...
end
请注意,我将此实现为实例方法,这意味着您需要调用&#34; watermelon.created_by_based_on_role(current_user)&#34;在控制器或视图中。