ruby-on-rails – 如何在text_field中设置默认值?
发布时间:2020-12-17 03:03:08 所属栏目:百科 来源:网络整理
导读:我知道这个问题被问了很多次,但我仍然觉得我错过了一些明显的东西.给定一个带有字段城市的模型地址,我们希望用默认值初始化,比如Awesome City. 到目前为止我尝试过的: 1)视图中的默认值: # @file: /app/views/addresses/_form.html.erbdt%= f.label :city
我知道这个问题被问了很多次,但我仍然觉得我错过了一些明显的东西.给定一个带有字段城市的模型地址,我们希望用默认值初始化,比如Awesome City.
到目前为止我尝试过的: 1)视图中的默认值: # @file: /app/views/addresses/_form.html.erb <dt><%= f.label :city %></dt> <dd><%= f.text_field :city,:value => 'Awesome city' %></dd> 这有效,但感觉不对.用户也无法改变它,价值仍将是令人敬畏的城市. 2)覆盖城市方法: # @file: app/models/address.rb def city self[:city] ||= 'Awesome city' end 该字段呈现为空,因此由于某种原因它不起作用.如果您尝试使用Address.new.city,则会获得默认值. 3)在控制器中分配默认值: # 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 这实际上有效,但我认为它不应该在控制器中,而应该在模型中. 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 其他选项是在您的控制器中的新操作中定义它,这更灵活…因此,当您创建新地址时,它将以默认值启动…. def new @address = Address.new @address.city ||= "Awesome City" ... end 编辑 – 在模型中定义默认值的可能解决方案: before_save :set_default_city def set_default_city self.city ||= 'Awesome city' end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |