Rails 3 + Select2多个id + AJAX

时间:2013-03-20 20:31:49

标签: ruby-on-rails ajax jquery-select2

我正在使用Select2进行AJAX调用,以便为我的应用中的简单消息传递系统选择用户。得到了大部分工作(甚至是通过AJAX的InitSelection),除了我一直在试图做一件似乎很简单的事情:迭代通过多个用户ID为每个人创建一条消息。

显然,问题是Select2将多个id作为字符串返回,而不是Rails期望的数组。我尝试了一堆似乎不起作用的东西......

如何转换字符串:

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

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

2 个答案:

答案 0 :(得分:1)

实际上,经过大量的谷歌搜索,我终于得到了相当简单的答案。此代码现在驻留在我的应用程序控制器中,用于需要转换为Select2目的的任何字符串:

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

希望这能节省其他人我花的时间......:)

为了清楚起见,我从控制器中的create动作调用它:

     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

答案 1 :(得分: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]}