簡體   English   中英

通過Rails中的params哈希傳遞ActiveRecord數組

[英]Pass an ActiveRecord array through the params hash in Rails

當我通過參數散列傳遞@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)

您沒有對象。 你有一個字符串。 您可以將字符串轉換為數組,並且數組的內容不會成為對象。 如果要在對象中打開它,則必須解析字符串。 提取鍵並將其作為參數傳遞給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}

免責聲明:這不是最好的方法。 這是不可重用的。 但是對於這個問題,可能會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM