我有很多复选框,我希望通过循环获取已检查的复选框,而不是使用每个复选框的if语句。代码(它不起作用)如下:
(1..66).each do |i|
$st = "a"+i.to_s
if params[:$st]
@cat = Categories.new
@cat.af_id = @af.id
@cat.cat_id = i
@cat.save
end
end
复选框名为a1-a66。我猜它构造了类似params [:“a1”]的东西,我的意思是它添加了引号。有什么想法吗?
答案 0 :(得分:0)
我看不出它会如何以干净的方式发挥作用。
需要一些重构。
尝试将参数提取到数组
def get_cat_ids(params)
@cat_ids = params.dup.keep_if { |k,v| k.to_s[/^a\d+/].present? }.values
end
#@cat_ids = [1, 2, 4, 32, 65]
这样你就可以做一个简单的
@cat_ids.each do |cat_id|
cat = Categories.new
cat.af_id = @af.id
cat.cat_id = cat_id
cat.save
end
答案 1 :(得分:0)
(1..66).each do |i|
$st = "a"+i.to_s
if params[$st.parameterize.to_sym]
@cat = Categories.new
@cat.af_id = @af.id
@cat.cat_id = i
@cat.save
end
end
parameterize.to_sym解决了我的问题..