0

ROR のチェック ボックスにデフォルト値を割り当てようとしています。以下はヒエラルキーです。

  1. 値がパラメーターに含まれているかどうかを確認します (url クエリ文字列)
  2. セッション変数にあるかどうかを確認します
  3. どちらでもない場合は、すべての可能な値をデフォルトにし、@rates をすべての可能な値に設定します

私は次のコードを書きました:

@all_rates = Rates.all_rates
rates_all = {} 
@all_rates.each {|rate| rates_all[rate] = "1"} 
p rates_all
@rates = params[:rates] ||= session[:rates] ||= rates_all
puts @rates.length, @rates

ip rates_all の場合、ハッシュが返されますが、@rates.length をチェックすると、割り当てられていないため、0 が返されます。

4

2 に答える 2

0

params[:rates]がnilかどうかを確認しましたか?それが空のハッシュである場合、それはまだオブジェクトであり、値がないためです。しかし、とにかく空のハッシュ オブジェクトが割り当てられ@rates、その結果、rates も長さ 0 の空のハッシュ オブジェクトになります。

于 2012-10-15T12:08:36.200 に答える
0

これを試してください:

@rates = case 
  when params[:rates].present?
    params[:rates]
  when session[:rates].present?
    session[:rates]
  else 
    Rates.all_rates.inject({}) { |hsh, rate| hsh.merge(rate => '1') }
end

サイドバー: モデル名は単数形にする必要がありRateます。あなたの例の||=構文は無効です。それはちょうどあるはずです||

于 2012-10-15T14:29:49.643 に答える