2013-03-20 69 views
0

我使用Select2進行AJAX調用,爲我的應用程序中的簡單郵件系統選擇用戶。通過AJAX獲得了大部分工作(甚至是通過AJAX的InitSelection),除了我一直在試圖做一件看起來很容易的事情之外:我通過遍歷多個用戶ID來爲每個用戶創建一條消息。Rails 3 + Select2 multiple ids + AJAX

顯然,問題在於Select2將多個ID作爲字符串返回,而不是Rails所期望的數組。我試過好像一堆東西不工作....

如何轉換的字符串:

{"username" => "78,21,12"} 

{"username" => [78,21,12]} 
+0

這個怎麼樣假設你的變量名爲哈希'hash.map {|一,b | {a => b.split(',')}}' – ant 2013-03-20 20:34:04

+0

@ant,我可以在表單提交中這樣做嗎? – awvidmer 2013-03-20 20:36:38

+0

對不起,我明白你的意思了。看看我結束了下面... – awvidmer 2013-03-20 20:38:22

回答

1

其實,經過多次使用Google,我終於得到了相當簡單的答案。此代碼現在居住在我的應用程序控制器,需要轉換爲選擇二目的的任何字符串:

def s_to_array(string) 
    result = [string[0..-1].split(',').collect! {|n| n.to_i}].flatten 
end 

希望這樣可以節省別人我所花費的時間... :)

爲了清楚起見,我打電話這從在控制器中的創建操作:

 def create 
     messaged = (params[:message][:username]) 
     body = (params[:message][:body]) 
     subject = (params[:message][:subject]) 
     msg_group = s_to_array(messaged) 
     sanitized = Sanitize.clean(body, Sanitize::Config::BASIC) 

     msg_group.each do |u| 
      @message = Message.new 
      @message.subject = subject 
      @message.sender = @user 
      @message.recipient = User.find(u) 
      @message.body = sanitized 
      @message.save 
     end 
    .... 
    end 
0

這裏是一個解決方案:

h = {"username" => "78,21,12"} 

h.map{|a,b| {a=> b.split(',')}}.reduce(:merge) 

產地:

{"username"=>["78", "21", "12"]} 

或者,如果你想要的整數,而不是字符串:

h.map{|a,b| {a=> b.split(',').map(&:to_i)}}.reduce(:merge) 

產地:

{"username"=>[78, 21, 12]} 
+0

嗯。可能會誤導你使用簡單的散列。這只是(更深)形式參數的一部分。所以我提取了「用戶名」值(string = params [:message] [:username]),並在create action中應用了下面的內容,這些都起作用。 – awvidmer 2013-03-20 20:50:42

+0

@awvidmer你可以給樣品輸入/輸出 – ant 2013-03-20 20:57:02

+0

不知道你到底在找什麼,但這是參數的結構:參數:{「utf8」=>「✓」,「authenticity_token」=>「 1xdBYp4TmOybkHfXuOMAQgim2N3kthqPLUjFI + o ++ Rk =「,」message「=> {」username「=>」73,71「,」subject「=>」Test「,」body「=>」test「},」user_id「=> 「remdivwa」} – awvidmer 2013-03-22 21:13:29