如何为 rails 中的新表单设置文本字段的默认值?我正在使用:值=>“0”。但在编辑表单中我也得到“0”值

how to have default value for a text field only for new form in rails? iam using :value => "0".but in edit form also iam getting '0' value

如何为 rails 中的新表单设置文本字段的默认值?我正在部分使用 :value => "0" 形式。但问题是虽然我在数据库中有一个值,但我在编辑表单中得到的是 0。实际上,当用户没有 select 任何值时,我默认为文本字段分配 0 的新表单。但是当用户更改该值并保存表单时,然后在显示编辑表单时我也得到“0”值。当编辑表单中的数据库中有值时,如何避免显示“0”?这是我使用的语法。

   <%= f.text_field :duration , :size=>"4", :value => "0" %>

这应该有效:

<%= f.text_field :duration , :size=>"4", :value => (f.object.duration || 0) %>
<%= f.text_field :duration , :size=>"4", :value => (f.object.duration || 0 ) %>

如果持续时间存在则显示,否则显示 0。

你也可以这样做:

 <%= f.text_field :duration , :size=>"4", :value => (0 unless f.object.new_record?) %>

FormBuilder 尝试从给定对象中提取值。它甚至可能不是 ActiveRecord 模型,因此完全可以提供默认值而无需将它们保存在数据库中。那你是怎么做到的?

当然可以在输入字段中填写值:

但是生成的标记有点难看。另外,定义数据不是视图的工作。

读这个,但不要这样做:

有点笨(但又快又好用)的方法是在控制器中分配默认值:

def new
  @something = Something.new # Even unpersisted objects store some data
  @something.value = 'hi'    # No DB queries, but the value will get to the form
end

即使不在数据库中,给定值也会出现在表单中。这也不是真正的控制器的工作。

那只剩下模型了。

相反,这样做:

有趣的是我们可以将默认值输入数据库。将它们放在您的模式中。 ActiveRecord 足够聪明,可以注意到这一点,并使用迁移中给出的值填充 Something.new 的默认字段。

如果您正在创建 table,您的迁移将如下所示:

class CreateSomethings < ActiveRecord::Migration
  def change
    create_table :somethings do |t|
      t.string :key
      t.string :value, default: 'hi'

      t.timestamps null: false
    end
  end
end

但是您甚至可以使用 change_column.

将其添加到现有的 table 中