3

私はRoRの初心者です。私が解決しようとしている問題は、データベースに保存するためにハッシュの配列をJQueryからRailsに渡す方法です。

コンテクスト

私のアプリケーションでは、ユーザーは任意の数のアイテムをキャンバスにドラッグアンドドロップできます。これはJQueryを使用して行われます。

次に、ユーザーはXY座標を含むこれらのアイテムを保存できます。

概念的には、これによりハッシュの配列が保存されていると思います。各ハッシュはアイテムに対応し、ItemCode、X座標、Y座標で構成されています。

私は各ステップで、どのような方法/技術を使用すべきかを理解しようとしています。

これが私がこれまでに理解したことです:

  1. ?オブジェクトの配列をJQueryに保存しますか?
  2. jquery.paramを使用してこの配列をシリアル化します
  3. 結果の文字列をparamsとしてjquery.ajaxを使用してRailsに渡します
  4. ?? Railsコントローラーはどういうわけかこの文字列を解析してデータベースに保存しますか?

重要な質問

A. Railsで簡単に解析するには、このシリアル化された文字列をどのような形式にする必要がありますか?

Jquery.paramは次のようなものを生成すると思います(param形式で):1 [item_code] = 432&1 [x] = 250&1 [y] = 200&2 [item_code] =348...私は何も見つけることができませんでしたRailsが最初の3つの用語が1つのアイテムを表し、次の3つの用語が次のアイテムを表すことなどを理解できるかどうか教えてください。

B.これを処理するRailsの方法は何ですか?言い換えると、このparams文字列をデータベースへのいくつかの新しいエントリとしてデータベースに配置するためのツールとして、どの特定のメソッドを検討する必要がありますか?

そしてもちろん、これを行うためのまったく異なる方法がある場合は、それを聞いてみたいと思います。ありがとう。

編集

明確にするために、ItemCodeは、データベースへのアイテムエントリのIDとは異なることを意図しています。ItemCodeは、他のテーブルのアイテムに関する特性を検索するために使用されます。

4

1 に答える 1

0

一方通行:

decodeURIComponent(jQuery.param({ items: { item1: { x: 1, y: 2 }, item2: { x: 3, y: 4 } } } ))  #  => items[item][x]=1&items[item][y]=2&items[item2][x]=3&items[item2][y]=4

次のようなparamsハッシュを生成します

{"items"=>{"item"=>{"x"=>"1", "y"=>"2"}, "item2"=>{"x"=>"3", "y"=>"4"}}}

次に、コントローラーで:

params[:items].each do |k,v|
  begin
    item = Item.new( id: k, x: v.x, y: v.y )  # or better, Item.new( x: v.x, y: v.y ) 
    item.save
  rescue ActiveRecord::RecordInvalid # deal with problems saving
    ...
    # retry?
  end
end

あなたの質問では、クライアントでアイテムIDを生成しています。一意のIDを追跡する必要をなくすために、実際にオブジェクトを作成するときにDBに処理させることをお勧めします。その場合、コントローラーに渡されるIDは任意のプレースホルダーですが、.param()オブジェクトを区別するために、呼び出しごとに一意である必要があります。

于 2012-10-18T20:57:53.553 に答える