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]为零?因为如果它是一个空哈希,那么它仍然是一个对象,只是没有任何值。但是空的哈希对象无论如何都会被分配@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 回答