我有一些不同类型的用户帐户模型 - 即用户模型,管理模型,访客模型。
我正在尝试创建一个论坛作为我正在制作的应用程序的一部分。创建帖子时,user_type属性设置为创建帖子的用户类型。我想做的事情似乎很简单,但我似乎无法解决这个问题。基本上,我想获得创建帖子的人的用户名。我不能只使用像post.user.username这样的东西,因为我有一些不同的模型,而且我不想用if语句做一些丑陋的事情,所以有更好的方法吗?这可能会显示我想要实现的目标(尽管这不起作用):
created by:<%= post.#{user_type}.username %>
然后输出到相关代码:
post.user.username
or post.admin.username
or post.guest.username
谢谢!
答案 0 :(得分:0)
也许是你最好的行动方案
class Post < ActiveRecord::Base
...
def username
[user,admin,guest].find(&:present?).try(:username)
end
end
你可以将它贴在你的模型中,甚至更好,decorator。
现在您可以在视图中执行此操作:
created by:<%= post.username %>
find
检索响应present?
的第一件事。换句话说,它发现第一件事不是零。然后,我们尝试在该方法返回的任何内容上调用username
。如果此帖子没有user
,admin
或guest
,则该方法将返回nil
。