2013-03-20 74 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