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

问题描述 投票:0回答:1

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

我的想法是

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

但是该值似乎没有设定。有人有想法么?首先,它不是简单的布尔属性的原因是我想根据故事是否固定以及故事的创建日期对故事进行排序。我认为Rails并不是按布尔值排序的好方法吗?

ruby-on-rails ruby simple-form
1个回答
2
投票

只需将datetime列与单独的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
© www.soinside.com 2019 - 2024. All rights reserved.