动态获取参数值

时间:2017-08-10 15:29:26

标签: ruby parameters

我的问题模型包含学生可以回答的问题的提示和答案选择。它包含名为:choice_0,:choice_1,:choice_2,:choice_3,:choice_4和:choice_5。

在我的控制器的一个部分中,我使用了以下代码:

correct_array.push(these_params[:choice_0]) if !these_params[:choice_0].blank?
correct_array.push(these_params[:choice_1]) if !these_params[:choice_1].blank?
correct_array.push(these_params[:choice_2]) if !these_params[:choice_2].blank?
correct_array.push(these_params[:choice_3]) if !these_params[:choice_3].blank?
correct_array.push(these_params[:choice_4]) if !these_params[:choice_4].blank?
correct_array.push(these_params[:choice_5]) if !these_params[:choice_5].blank?

在我的应用的其他方面,我使用了#{}语法,例如:

params[:choice_#{n}]

但由于某种原因,这并不能在params哈希中工作。我确信有更干燥的方法来完成这五行。

提前感谢您的任何见解。

2 个答案:

答案 0 :(得分:1)

你可以试试这个

(0..5).each do |i|
  param_i = these_params["choice_#{i}".to_sym]
  correct_array.push(param_i) if param_i.present?
end

答案 1 :(得分:1)

更多Ruby方法是:

correct_array = (0..5).map { |i| these_params["choice_#{i}".to_sym] }.select(&:present?)

或作为一种方法:

def correct_array
  (0..5).map { |i| these_params["choice_#{i}".to_sym] }.select(&:present?)
end

在任何一种情况下,你都有额外的好处,就是不必初始化correct_array,因为它是动态创建的。