= r.input :date_start do
= r.text_field :date_start, id: 'date_start'
如何为此设置默认值?
答案 0 :(得分:2)
= r.input :date_start, as: :string, input_html: {value: '01/01/2015', id: 'date_start'}
答案 1 :(得分:1)
使用此代码:
= r.input :date_start, as: :string, input_html: {id: 'date_start',value: '07/02/2015'}
答案 2 :(得分:0)
使用安全导航或此Answer中对另一个问题进行了解释的&.
是这里的一种选择;尤其是与||
运算符链接时。
注意:我使用的是Time.now
而不是Time.new
,因为我觉得它更具可读性,并且更好地传达了默认值的意图。如果您想查看现在或新的对话或基准,我建议您使用Question。在本Answer中,还有一个很好的解释说明为什么您可能想使用Time.current
input_html: { value: (f.object.date_start.present?) ? f.object.date_start : Time.now }
与这个Answer相同,只是一个重复的问题,没有说明,以上内容可以重写为:
input_html: { value: f.object&.date_start || Time.now }
如果存在,则提供现有值,如果不存在,则提供nil。与||
运算符配对时,逻辑将寻找第一个“真实”响应。 nil
不被认为是“真实的”,||
将选择nil
或Time.now
的默认值。
最后,我觉得这很容易理解,并且为简单表单输入设置默认值的答案也较少。
= f.input :date_start, input_html: { value: f.object&.date_start || Time.now }
我重构Kiry's Answer的另一个原因是,因为我认为在这种情况下使用三元数正接近违反Tell, Don't Ask的原理,如示例4中Tell, Don't Ask: refactoring examples所述。 / p>
对Gavit的回答的解释是为记录的保存设置迁移的默认值:
# migration
class AddDefaultToDateStartOfObj < ActiveRecord::Migration[5.2]
def change
change_column :objs, :date_start, -> { 'CURRENT_TIMESTAMP' }
end
end
# simple_form input
= f.input :date_start
注意:根据您的数据库类型,SQL可能会有所不同,但是关于此迁移的细微差别,这里是一个不错的Question。
但是,当对象是新对象而不是数据库中的记录时,这将不起作用。
我建议迁移并在对象模型中构建一个方法来处理输入的默认值,同时遵循更好的编码原则,这样可以使代码更干净/更具可读性。
# simple_form input
= f.input :date_start, input_html: { value: f.object.date_start_with_default }
# Model with date_start attribute
class Obj
def date_start_with_default
# based on your model, like in Kiry's comment to their own answer, you may need this instead:
# try(:date_start) || Time.now
date_start || Time.now
end
end
现在,可以通过模型在单个位置控制/更新默认值的所有逻辑。
答案 3 :(得分:-1)
在数据库中指定它: t.date:date_start,:null =&gt; false,:default =&gt; '现在()'
答案 4 :(得分:-1)
试试这个:
= f.input :date_start, input_html: { value: (f.object.date_start.present?) ? f.object.date_start : Time.new }