我正在使用Select2进行AJAX调用,以便为我的应用中的简单消息传递系统选择用户。得到了大部分工作(甚至是通过AJAX的InitSelection),除了我一直在试图做一件似乎很简单的事情:迭代通过多个用户ID为每个人创建一条消息。
显然,问题是Select2将多个id作为字符串返回,而不是Rails期望的数组。我尝试了一堆似乎不起作用的东西......
如何转换字符串:
{"username" => "78,21,12"}
到
{"username" => [78,21,12]}
答案 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]}