簡體   English   中英

如何在text_field中設置默認值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM