Ruby on rails 使用or的Ruby/ROR分配(复选框的默认值)
我正在尝试为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
@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]也是如此?