gpt4 book ai didi

ruby-on-rails - 如何在 text_field 中设置默认值?

转载 作者:行者123 更新时间:2023-12-03 15:58:03 25 4
gpt4 key购买 nike

我知道这个问题已经被问了无数次,但我仍然觉得我遗漏了一些明显的东西。给定一个模型 Address带字段 city我们想用默认值初始化它,比如 Awesome City .

到目前为止我尝试过的:

1) View 中的默认值:

# @file: /app/views/addresses/_form.html.erb
<dt><%= f.label :city %></dt>
<dd><%= f.text_field :city, :value => 'Awesome city' %></dd>

这有效,但感觉不对。用户也不能更改它,该值仍然是 Awesome city .

2) 覆盖 city方法:
# @file: app/models/address.rb
def city
self[:city] ||= 'Awesome city'
end

该字段呈现为空,因此由于某种原因它不起作用。如果您尝试 Address.new.city不过你会得到默认值。

3)在 Controller 中分配默认值:
# address doesn't have a controller, we use nested forms
# belongs_to :parent
# @file: /app/controllers/parents_controller.rb
def new
@parent = Parent.new
@parent.build_address
@parent.address.city = 'Awesome city'
end

这实际上有效,但我认为它不应该在 Controller 中,而应该在模型中。

4) 添加 after_initialize调用(是的,它有效,您不必覆盖回调):
# @file: app/models/address.rb
after_initialize :set_default_city
def set_default_city
self.city = 'Awesome city'
end

这也有效,但每次实例化对象时都会调用它,这是我们不想要的。

5)JavaScript,这似乎是一个极端的措施,应该比这更容易。

底线:添加默认值的最佳方法是什么?每次我必须给一个字段一个默认值时,似乎我都在努力做这么简单的事情。还有其他我缺少的选项吗?

编辑: :我使用 Rails 3.1.4 和 Ruby 1.8.7/1.9.2

最佳答案

您可以在迁移文件中定义它:

class CreateAddress < ActiveRecord::Migration
def change
create_table :addresses do |t|
...
t.string :city, default: "Awesome City"
...

t.timestamps
end
end
end

其他选项是在 new 中定义它action,在你的 Controller 中,它更灵活......所以,当你创建一个新的 address它将以默认值启动....
 def new
@address = Address.new
@address.city ||= "Awesome City"
...
end

编辑 - 在模型中定义默认值的可能解决方案:
before_save :set_default_city
def set_default_city
self.city ||= 'Awesome city'
end

关于ruby-on-rails - 如何在 text_field 中设置默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11223742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com