当我通过params hash传递@dispensers
时,我得到了:
@dispensers = "[#<Dispenser id: 38084, firstname: \"x\", lastname: \"A Lane\", created_at: \"2014-06-24 20:33:30\", updated_at: \"2014-06-24 20:33:30\", user_id: nil, public: true, birth_date: nil, university_id: nil, business_id: 29, branch_id: 38057, latitude: 30.3509, longitude: -97.7505, score: nil, gmaps: nil, full_name: \"Laura A Lane\", sex: \"F\", premium: false, slug: nil, public_reviews_on: true, bio: nil>, #<Dispenser id: 38102, firstname: \"x\", lastname: \"Woodall\", created_at: \"2014-06-24 20:33:31\", updated_at: \"2014-06-24 20:33:31\", user_id: nil, public: true, birth_date: nil, university_id: nil, business_id: 29, branch_id: 38075, latitude: 30.3379, longitude: -97.7593, score: nil, gmaps: nil, full_name: \"Ashley Woodall\", sex: \"F\", premium: false, slug: nil, public_reviews_on: true, bio: nil>
我想将其转换回可行的activerecord数组,但是当我运行
时 @dispensers.to_a
我看到undefined method 'to_a' for #<String:0x0000000ebf30c0>
更新
感谢Jorge,我已经找到了解决方案。
dispensers = params[:dispensers]
array = dispensers.split(',').select{|s| s =~ /Dispenser id/}
ids = array.map {|x| x[/\d+/]}
@dispensers = Dispenser.find(ids)
答案 0 :(得分:1)
你没有物体。你有一个字符串。您可以将字符串转换为数组,并且数组的内容不会成为对象。如果要在对象中转换它,则必须解析该字符串。解压缩密钥并将它们作为参数传递给Dispenser类的新实例。 这个问题主要与如何解析这个问题有关。
对于像单个方法这样的东西,这个结构似乎很复杂,也许你想学习如何构建自己的解析器:
http://thingsaaronmade.com/blog/a-quick-intro-to-writing-a-parser-using-treetop.html
有些步骤可能是:
选择数组符号,并拆分对象:
array = string[1..-1].split('>,')
然后,您将拥有一个对象属性字符串数组,您需要将其作为属性和值解析的哈希值转换为哈希值。最后一步应该是创建一个新对象。 (这部分是最难的)
其他选项可能是提取IDS:
array = string.split(',').select{|s| s =~ /Dispenser id/}
然后
ids = array.map {|id| id[17,10].to_i}
<强>声明: 这不是最好的方法。这不可重复使用。但为此 问题,这可能有所帮助。