【问题标题】:Is it possible to create an action upon the current date expiring date set in a field?是否可以根据字段中设置的当前日期到期日期创建操作?
【发布时间】:2014-04-01 12:46:49
【问题描述】:

我在 ActiveAdmin 中有一个名为 events 的表。

有一个名为 eventdate 的字段,这里有一个事件的日期。

我希望能够执行一项操作,当当前日期超过事件日期时,表格会在名为“事件结束”的选择框中自动选择。这基本上表示该事件已过期。

这可能吗?或者是否有一个 gem 可以为 ActiveAdmin 做到这一点?

对不起,这是一个基本的问题,但这是我的全部。

干杯

【问题讨论】:

  • 你能不能稍微解释一下。 to have an action 是什么意思 - 控制器操作? '选择框' - 下拉? the table gets an automatic selection - 什么表?数据库表,视图中的表,其他?
  • 嗨 BroiSatse,对不起,是的,activeadmin 本身中的表格视图。真是糟糕的解释。当我说操作时,我的意思是让事件选择框“event_type”自动选择或过期。
  • 这个选择框中还有其他选项吗?你为什么要给用户一个改变它的机会?标签在这里不是更好吗?
  • 这样在前端我基本上可以获取“过期”类并将任何过期的项目添加到当前正在运行的事件下方的过期列表中。

标签: ruby-on-rails ruby ruby-on-rails-4 activeadmin


【解决方案1】:

我会在您的 Event 模型上定义两件事:expired 范围和 expired? 方法:

class Event < AR::Base
  scope :expired, -> { where('eventdate < ?', Date.today) }

  def expired?
    eventdate < Date.today
  end
end

要列出所有过期事件,您只需调用:

Event.expired

如果您要列出所有事件并希望为过期事件添加一些自定义逻辑,您可以将此逻辑包装在 if event.expired? 中。

您可能还应该反转作用域:

scope :not_expired, -> { where.not('eventdate < ?', Date,today) }

【讨论】:

  • 啊,现在看看就好了,那么我怎么能将 date.today 与现场事件的日期进行比较呢? ps 是 Date,today 的意思是 Date.today
  • @Mdunbavan - 是的,这是一个错字。我不确定我是否理解您的问题 - 您已经有了上述方法来比较这些值。
  • 是的,属性的名称是eventdate,在这个例子中date是属性的名称?
  • @Mdunbavan - 我又坏了。 :) 我会更新答案
  • 我第二次猜到并做到了这一点,它工作得很好,你的天才:))谢谢
猜你喜欢
  • 2012-12-21
  • 1970-01-01
  • 2011-04-23
  • 2016-03-20
  • 2021-12-07
  • 2014-04-25
  • 2019-06-30
  • 2020-02-14
  • 1970-01-01
相关资源
最近更新 更多