Обновление Rails 5 с использованием link_to - PullRequest
0 голосов
/ 18 января 2019

У меня есть Contract модель с атрибутом accept_date

Я хочу обновить accept_date через link_to, используя пользовательский метод, который также может изменить его состояние AASM. Что лучше сделать, передав параметры из вида как link_to put или в контроллере как link_to get?

вид

// put
= link_to 'Accept', custom_method(@contract, contract: {accept_date: Time.now}), method: :put
// get
= link_to 'Accept', custom_method(@contract)

Контроллер * * 1016 def custom_method @contract.aasm_accept! @contract.update(contract_params) # if put @contract.update_attributes(accept_date: Time.now) # if get Кроме того, в чем разница между Time.now и Date.today и другими помощниками для получения текущего времени, и зависят ли они от t.date t.time и t.datetime? Могу ли я использовать Date.today для атрибута t.time? Я использовал описанные выше методы, и база данных показывает коммит, но ничего не сохраняется.

1 Ответ

0 голосов
/ 18 января 2019

вы можете напрямую добавить метод после обновления состояния, как показано ниже, поэтому необходимо написать в методе контроллера, использовать PUT вместо GET, потому что вы что-то обновляете

your_model.rb

event :aasm_accept do
  transitions from: :nothing, to: :everything, after: proc { |*_args| update_date_value }
end


def update_date_value
 # your business logic
end

Разница между .current и .now заключается в том, что .now использует часовой пояс сервера, а .current использует настройку среды Rails. Если он не установлен, то .current будет таким же, как .now.

Date.today даст вам сегодняшнюю дату без часового пояса. Time.current покажет вам текущее время с часовыми поясами, настроенными в приложении rails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...