私の考えでは、デフォルトを定義して使用する最良の方法は、ユーザー設定テーブルに別の行を追加し、それをクラス変数としてモデルにロードすることです。次に、設定が見つからない場合は、アクセサーをオーバーライドしてデフォルトを見つけます。このようなもの:
class UserPreference < ActiveRecord::Base
# load default preferences as a class variable
@@defaults ||= find(1).attributes
# redefine accessors or each column to load default if nil
column_names.each do |column|
method_name = "#{column}_with_default".to_sym
send :define_method, method_name do
value = send("#{column_without_default}")
case value
when nil
@@defaults[column]
else
value
end
end
alias_method_chain column, :default
end
...
end
基本的に、デフォルト設定 (行 1 からロード) はクラス変数としてモデルに保存されます。戻り値が nil の場合にデフォルトが返されるように、すべてのアクセサーが再定義され、エイリアス メソッド チェーンの一部になります。|| 使いたかった ただし、ユーザーがブール値の設定を false に設定した場合に問題が発生します。
編集:NBサーバーを再起動せずにレールアプリのデフォルトを更新する良い方法がわかりません。