gpt4 book ai didi

ruby-on-rails - 在 View 中显示状态 - Rails

转载 作者:数据小太阳 更新时间:2023-10-29 08:30:16 24 4
gpt4 key购买 nike

在我的 Rails 应用程序中,我有一个名为 JobPosting 的模型。职位发布有一个状态,它可以是:

  1. 等待批准
  2. 草稿
  3. 打开
  4. 已安排面试
  5. 关闭

我使用 ActiveRecord::Enum 实现了这些状态像这样:

class JobPosting < ApplicationRecord
enum status: [:waiting_approval, :draft, :open, :interviews_scheduled, :closed]
end

现在我想根据职位发布的状态显示不同的用户界面元素。即

对于我想要的等待审批状态:

<div class="label label-warning">pending approval</div>

对于我想要的打开状态:

<div class="label label-success">open</div>

请注意,文本和类不同,因为元素在不同情况下的样式不同。在我的 index.html.erb 中,需要进行这种样式设置的地方,我可以做一堆嵌入式 ruby​​ if 语句并检查发布的状态并显示所需的元素,如下所示:

<% if posting.waiting_approval? %>
<div class="label label-warning">pending approval</div>
<% elsif posting.open? %>
<div class="label label-success">open</div>
<% elsif posting.closed> %>
etc...
<% end %>

感觉好像不是很DRY,有没有更好的办法?

或者,我可以创建部分并将逻辑存储在其中,然后只渲染部分,但又是如何完成的?

最佳答案

我会做这样的事情:

class JobPosting < ApplicationRecord
enum status: [:waiting_approval, :draft, :open, :interviews_scheduled, :closed]

def status_label
{
'waiting_approval' => 'pending approval',
'open' => 'open',
'interviews_scheduled' => 'interview is scheduled',
'closed' => 'closed',
'draft' => 'draft'
}[self.status]
end
end

然后在 View 中:

<div class="label <%= posting.status %>"><%= posting.status_label %></div>

因为在 Rails 中我们有 sass 你可以继承其他 css 类的属性:

.waiting_approval{
@extend .label-warning;
// customize this css class if needed.
}

// and so on..

关于ruby-on-rails - 在 View 中显示状态 - Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41465386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com