Обновите атрибут datetime, используя логический вход - PullRequest
0 голосов
/ 16 марта 2020

У меня есть модель Story, для которой я добавляю атрибут pinned_at. Я хочу, чтобы пользователь мог выбирать, нужно ли закреплять историю в верхней части индексной страницы, но не иметь возможности устанавливать значение даты и времени, поскольку оно всегда должно быть текущим значением даты и времени при установке.

Мое мышление было чем-то вроде

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

Но значение, похоже, не установлено. У кого-нибудь есть идеи? Во-первых, причина, по которой это не простой логический атрибут, заключается в том, что я хочу отсортировать истории по тому, закреплены ли они, и по дате их создания. Я не думаю, что у rails есть хороший способ сортировки по логическому значению?

1 Ответ

2 голосов
/ 16 марта 2020

Просто используйте столбец даты и времени вместе с отдельным установщиком / получателем:

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
...