0

我正在使用 Select2 进行 AJAX 调用,以便为我的应用程序中的简单消息传递系统选择用户。几乎所有东西都能正常工作(甚至是通过 AJAX 进行的 InitSelection),除了我一直在努力尝试做一件看似简单的事情:遍历多个用户 ID 以为每个用户 ID 创建一条消息。

显然,问题在于 Select2 将多个 id 作为字符串返回,而不是 Rails 期望的数组。试了一堆好像都没用。。。。

如何转换字符串:

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

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

2 回答 2

1

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

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
于 2013-03-20T20:34:30.197 回答
0

Here is one solution :

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

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

Produces :

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

Or if you want integers instead of string :

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

Produces :

{"username"=>[78, 21, 12]}
于 2013-03-20T20:37:41.047 回答