以rails形式添加当前日期

时间:2018-06-19 18:41:50

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

我想以如下形式添加当前日期。我不知道如何。友善的帮助

<div class = "form-group">
        <div class="control-label col-sm-2">
          <%= form.label :date_submitted, class: "required" %>
        </div>
        <div class="col-sm-8">
          <%= form.date_field :date_submitted, Date.today, required: true, readonly: true %>
        </div>
      </div>

3 个答案:

答案 0 :(得分:0)

我不确定这是否理想,但是如果您必须以表单的形式提供它,也许在控制器中设置它更有意义>

class SomeController < ApplicationController
  def edit
    @modelname = Modelname.find(params[:id])
    @modelname.date_submitted = Time.now
  end
end

鉴于表单可以在将来的某个时间/日期提交,我不希望您在表单中进行设置,因为日期/时间可能会过时/过时。相反,我会这样在创建/更新中捕获它:

class SomeController < ApplicationController
  def update
    @modelname = Modelname.find(params[:id])
    @modelname.update(modelname_params.merge({ date_submitted: Time.now }))
  end

  private

  def modelname_params
    params.required(:modelname).permit(:fieldname)
  end
end

答案 1 :(得分:0)

您可以为date_field添加一个值:

<%= form.date_field :date_submitted, value: Date.today %>

如果您在“新建”和“编辑”之间共享表单,则可以添加条件以显示默认值(Date.today)或记录的日期:

<%= form.date_field :date_submitted, value: (Date.today if @my_object.new_record?)  %>

答案 2 :(得分:0)

Rails 5已经实现了一个不错的属性API(ActiveRecord::Attributes::ClassMethods#attribute,因此,如果您想要date_submitted的默认值,它将像

一样简单。
class SomeModel < ApplicationRecord
  attribute :date_submitted, :datetime, default: -> {Time.now}
end

现在,当在对象上调用date_submitted方法时(例如,通过表单生成器),它将显示调用该方法的当前日期/时间。

由于这只是默认值,如果在实例化过程中提供了不同的值,例如SomeModel.new(date_submitted: "2018-06-19"),则该值将优先于所提供的默认值。

这么说是因为您已经决定date_submitted是必需的并且是只读的,并且您正在设置此值,如果在模型上使用time_stamps,那么做类似

的操作可能更有意义
class SomeModel < ApplicationRecord
  def date_submitted
    self.created_at.to_date #for just a Date
  end
end

由于created_at时间戳将始终表示创建对象的时间,在这种情况下,该时间戳似乎与date_submitted相同。