我有一个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.now
和Date.today
与其他帮助者之间的区别是,它们是否依赖于t.date
t.time
和t.datetime
?我可以对Date.today
属性使用t.time
吗?
我使用了上面的方法,数据库显示了一个提交,但没有存储任何内容。
答案 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应用程序中配置的时区的当前时间。