[英]How to set a default value in a text_field?
我知道這個問題已經被問了無數次,但是我仍然覺得我缺少明顯的東西。 給定一個帶有要使用默認值初始化的字段city
的模型Address
,例如Awesome City
。
到目前為止,我已經嘗試過:
1)視圖中的默認值:
# @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)在控制器中分配默認值:
# 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
另一個選擇是在控制器的new
操作中定義它,這更加靈活...因此,當您創建新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
我的紅寶石有點生銹,但是有點像
Parent < ActiveRecord::Base
def self.custom_parent(options)
custom_parent = self.new
if options.empty?
custom_parent.update_attributes(default_options)
else
//Iterate over all options and assign them to custom_parent
end
return custom_parent
end
end
您必須創建“ default_options”哈希
我不認為這會立即解決,但我想你已經明白了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.