この質問が無数に聞かれていることは知っていますが、まだ明らかな何かが欠けていると感じています. デフォルト値で初期化したいAddress
フィールドを持つモデルが与えられた場合、たとえば.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>
これは機能しますが、気分が良くありません。また、ユーザーはそれを変更できません。値は のままです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、これは極端な方法のように思えますが、これよりも簡単なはずです。
結論: デフォルト値を追加する最良の方法は何ですか? フィールドにデフォルト値を与えなければならないときはいつでも、私はそのような単純なことを一生懸命にしようとしているようです. 私が見逃している他のオプションはありますか?
編集:: Ruby 1.8.7/1.9.2でRails 3.1.4を使用しています