使用变量获取复选框值并在rails中循环

时间:2014-10-27 20:42:13

标签: ruby-on-rails

我有很多复选框,我希望通过循环获取已检查的复选框,而不是使用每个复选框的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”]的东西,我的意思是它添加了引号。有什么想法吗?

2 个答案:

答案 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解决了我的问题..