如何为 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 中
如何为 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
.