我的问题模型包含学生可以回答的问题的提示和答案选择。它包含名为: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哈希中工作。我确信有更干燥的方法来完成这五行。
提前感谢您的任何见解。
答案 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
,因为它是动态创建的。