使用link_to的Rails 5更新日期

时间:2019-01-17 23:07:18

标签: ruby-on-rails ruby-on-rails-5

我有一个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)

控制器

def custom_method
 @contract.aasm_accept!
 @contract.update(contract_params) # if put
 @contract.update_attributes(accept_date: Time.now) # if get

此外,Time.nowDate.today与其他帮助者之间的区别是,它们是否依赖于t.date t.timet.datetime ?我可以对Date.today属性使用t.time吗?

我使用了上面的方法,数据库显示了一个提交,但没有存储任何内容。

1 个答案:

答案 0 :(得分:0)

您可以在更新状态后直接添加方法,如下所示,因此需要写控制器的方法,使用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应用程序中配置的时区的当前时间。