0

Select2 を使用して AJAX 呼び出しを行い、アプリ内の単純なメッセージング システムのユーザーを選択しています。ほとんどすべてが機能するようになりました (AJAX を介した InitSelection でさえ)。ただし、簡単なことと思われることを実行しようとして髪を引き裂いています。複数のユーザー 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

これにより、私が費やした時間を他の人が節約できることを願っています... :)

わかりやすくするために、コントローラーの 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
于 2013-03-20T20:34:30.197 に答える
0

これが1つの解決策です:

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]}
于 2013-03-20T20:37:41.047 に答える