使用布尔输入更新日期时间属性

Update a datetime attribute using a boolean input

我有一个模型 Story,我要为其添加 pinned_at 属性。我希望用户能够 select 如果故事需要固定到索引页面的顶部,但不能设置日期时间值,因为在设置时它应该始终是当前日期时间。

我的想法是

= f.check_box :pinned_at, value: DateTime.now

但是这个值好像没有设置。有人有想法么?首先,它不是一个简单的布尔属性的原因是我想根据故事是否固定和创建日期对故事进行排序。我认为 rails 没有按布尔值排序的好方法?

只需将日期时间列与单独的 setter/getter:

一起使用
class Story < ApplicationRecord
  def pinned
    pinned_at.present?
  end
  alias_method :pinned?, :pinned

  def pinned=(value)
    if value
      self.pinned_at = Time.current unless pinned? 
    else
      self.pinned_at = nil
    end
  end
end

= f.check_box :pinned