Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用or的Ruby/ROR分配(复选框的默认值)_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 使用or的Ruby/ROR分配(复选框的默认值)

Ruby on rails 使用or的Ruby/ROR分配(复选框的默认值),ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试为ROR中的复选框指定默认值。以下是继承人名单: 检查值是否在参数中(url查询字符串) 检查它是否在会话变量中 如果两者都不存在,则默认为所有可能的值,并将@rates设置为所有可能的值 我编写了以下代码: @all_rates = Rates.all_rates rates_all = {} @all_rates.each {|rate| rates_all[rate] = "1"} p rates_all @rates = params[:rates] ||= session

我正在尝试为ROR中的复选框指定默认值。以下是继承人名单:

  • 检查值是否在参数中(url查询字符串)
  • 检查它是否在会话变量中
  • 如果两者都不存在,则默认为所有可能的值,并将@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
    

    当我p rates\u all时,我得到哈希值,但是当我检查@rates.length时,它没有被分配,我得到一个0。

    你检查了
    参数[:rates]
    是否为零了吗?因为如果它是一个空散列,那么它仍然是一个对象,没有任何值。但是空哈希对象将被分配给
    @rates
    ,结果rates也是一个空哈希对象,长度为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
    。示例中的
    | |=
    语法无效。它应该是
    |

    顺便说一句,我可以使用if,elsif,els语句使它工作。不确定上面的版本为什么不起作用。实际上,当执行if、elsif、else语句时,它甚至不起作用@速率仍然是{}是的,当我打印参数时,我没有看到任何引用参数[:rates]的内容,会话[:rates]也是如此?