轨道/Ruby 覆盖数组对象的覆盖to_s



在我的轨道表单中,我正在使用多选标签

代码看起来像

  <%= select_tag '[mycontroller][users]', @users, { :multiple => true, :size => 7} %>
  <p><%= submit_tag l(:button_apply)%></p>

在表单提交上传递的参数是

 mycontroller[users][]=79&mycontroller[users][]=80&commit=Apply

现在在我的视图文件中,当我检索参数时,它们正在转换为字符串所以我得到 [79,80] 被转换为"7980"

获取用户参数的代码如下所示

users =  params[:mycontroller][:users] unless params[:mycontroller].nil? 

编辑

我想的问题是"#{}"将数组转换为字符串。 即使 <%= %> 也会调用to_s

那么如何覆盖它呢?这样to_s将返回"79,80"而不是"7980"

我错过了什么?请发表评论?

闷不乐。

覆盖

to_s似乎非常严厉。

您可以遍历单独显示每个元素的数组(如果您为每个元素呈现一些复杂的东西,通常更具可读性,或者如果您只想用逗号分隔数组元素,请使用类似 my_array.join(',') 的东西。

尝试调用 array.join(","),并且 [79,80] 的数组应该变成类似 "79,89" 的字符串

拼音连接方法

我不知道 Array.join 返回字符串,所以我试图以自己的方式解决它。这可能效率不高/有效,但这是一种解决方法。

arr = [79,80]
a =arr.inject(0){|op,i| op.to_s + i.to_s + ","}.to_s  
a[1,a.length-2] # "79,80"

最新更新