0

我有几个模型是不同类型的用户帐户——即用户模型、管理员模型、访客模型。

我正在尝试创建一个论坛作为我正在制作的应用程序的一部分。创建帖子时, user_type 属性设置为创建帖子的用户类型。我想做的事情似乎很简单,但我似乎无法解决。基本上,我想获取创建帖子的人的用户名。我不能只使用 post.user.username 之类的东西,因为我有几个不同的模型,而且我不想用 if 语句做一些丑陋的事情,那么有更好的方法吗?这可能会显示我想要实现的目标(尽管这不起作用):

created by:<%= post.#{user_type}.username %>

然后将输出到相关代码:

post.user.username
or post.admin.username
or post.guest.username

谢谢!

4

1 回答 1

0

也许你最好的行动方案

class Post < ActiveRecord::Base
  ...
  def username
    [user,admin,guest].find(&:present?).try(:username)
  end
end

您可以将其粘贴在您的模型中,甚至更好的是,装饰器中。

现在您可以在您的视图中执行此操作:

created by:<%= post.username %>

find检索响应的第一件事present?。换句话说,它找到第一个不是 nil 的东西。然后,我们尝试调用username该方法返回的任何内容。如果此帖子没有user, admin, 或guest,该方法将返回nil

于 2013-09-28T16:15:09.907 回答