简体   繁体   English

Rails/Ruby Over ride to_s 数组 object

[英]Rails/Ruby Over ride to_s for array object

In my rails form i am using a multi select tag在我的 Rails 表单中,我使用了多个 select 标签

code looks like代码看起来像

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

On form submit parameters passed are在表单提交参数传递是

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

Now in my view file when i retrieve params they are being converted to string so i get [79,80] being converted to "7980"现在在我的视图文件中,当我检索参数时,它们被转换为字符串,所以我得到 [79,80] 被转换为“7980”

code for getting user param looks like获取用户参数的代码看起来像

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

Edit :编辑

Problem i suppose is that "#{}" converts array to string.我想问题是“#{}”将数组转换为字符串。 even <%= %> will call to_s甚至 <%= %> 也会调用 to_s

So how to override this?那么如何覆盖这个呢? So that to_s will return "79,80" instead of "7980"这样 to_s 将返回“79,80”而不是“7980”

What am i missing?我错过了什么? Comments, please?意见,好吗?

Thnx.谢谢。

Overriding to_s seems very heavy handed.覆盖to_s似乎非常沉重。

You can either iterate through the array displaying each element individually (usually more readable if you're presenting something complicated for each element, or use something like my_array.join(',') if you just want to comma separate the array elements.您可以遍历单独显示每个元素的数组(如果您为每个元素呈现一些复杂的内容通常更具可读性,或者如果您只想用逗号分隔数组元素,则使用类似my_array.join(',')的内容。

Try to call array.join(",") and a array of [79,80] should become a string like "79,89"尝试调用 array.join(",") 并且 [79,80] 的数组应该变成像“79,89”这样的字符串

Ruby Join Method Ruby 加入方式

I dint know that Array.join returns string, so i was trying to solve it in my own way.我不知道 Array.join 返回字符串,所以我试图用我自己的方式解决它。 This may not be efficient/effective but its a workaround.这可能效率不高/效果不佳,但它是一种解决方法。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM