Ruby on rails - 使用if,elseif&的内联条件如果条件

时间:2017-06-20 02:29:30

标签: ruby

在我的应用程序中,用户提交的每个帖子都将被批准拒绝。我有一个Post模型,在我的posts表中,我有列:approved& denied并且boolean都是= is_true?(post.approved)? 'APPROVED' : 'PENDING'

在我看来,我做了:

is_true?

注意:ApplicationHelper是我def is_true?(object) object == true end

中的帮手
approved

正如代码所说,如果帖子是inline conditions,那么它将是 APPROVED ,否则就是 PENDING 。这很好,但我不知道如何在我的内联条件中添加 DENIED

所以基本上 IF 帖子已获批准,它将 APPROVED ELSE IF 帖子已被批准或被拒绝将待定& IF 帖子被拒绝后, DENIED

我知道我可以在我的视图中写出条件,但代码变得丑陋而且我是float的粉丝并且干净利落。

我怎样才能让它干净?

1 个答案:

答案 0 :(得分:1)

由于您的字段已经是布尔值,因此不需要帮助程序进行冗余比较。

你可以直接做..

post.approved? ? 'APPROVED' : post.denied? ? 'DENIED' : 'PENDING'

这是一个可以工作的短班,短篇故事长,可以转到你的模型并从视图中调用它......有时候一个衬里有点令人困惑......

def status
  if approved?
    'APPROVED'
  elsif denied?
    'DENIED'
  else
    'PENDING'
  end
end

从视图中,

post.status

<强>更新

根据评论,OP在多个模型中有这些字段,写一个帮助器会使它更像 DRY

def status_of(object)
  if object.approved?
    'APPROVED'
  elsif object.denied?
    'DENIED'
  else
    'PENDING'
  end
end