1

(次が読みにくい場合は、最後の行をお読みください)。しばらくの間、Ember と Rails のバックエンドを使用していますが、トランザクションやバックエンドにアクションを送信するために使用される他の方法にまだ少し固執しています。と がUsersありEventsます。Users1つまたは複数Eventsに参加でき、それぞれにEvent複数の参加Usersが可能です。この関係は、次のように Mongoid マクロを使用して維持していhas_and_belongs_to_manyます。

イベント

# ...
has_and_belongs_to_many :attendings, class_name: "User" , inverse_of: :attendances
# ...

ユーザー

# ...
has_and_belongs_to_many :attendances, class_name: "Event" , inverse_of: :attendings
# ...

私のテンプレートではEvents、バックエンドに保存されているすべてのリストと、Userまだ出席していない場合は「出席」ボタン、出席している場合は「出席しない」ボタンを表示していUserます。参加するために、トランザクションを使用して PUT リクエストを作成し、Ember イベント コントローラーで次の手順を実行しようとしました。

イベント コントローラー (Ember)、actionAttendingトランザクションを使用するメソッド:

actionAttending: function() {
    var userId = this.get('controllers.app.model.id');

    this.transaction = this.get('store').transaction();

    this.get('attendings').pushObject(App.User.find(userId));

    this.transaction.add(this.get('model'));
    this.transaction.commit();
}

これを試してみると、EventJSON リクエストにはすべてのパラメーターとリレーションが含まれていますが、attendings属性は含まれていません。そこで、jQuery リクエストを使用してみることにしました。

イベント コントローラー (Ember)、jQuery ajax を使用した actionAttending メソッド:

// ...

var eId = this.get('id');
this.get('attendings').pushObject(App.User.find(userId));
var eAttendings = this.get('attendings');

var url = "/events/" + eId + ".json";

var data = { event: { id: eId, attendings: eAttendings } };

$.ajax({
  type: "PUT",
  url: url,
  data: data,
  dataType: "JSON"
});
// ...

まあ、これはほとんど機能していますが、私が宣言する行、eAttendingsEmber が関数が呼び出されていないことについて不平をinit言う行、または同様の何かを除いては。少しグーグルで調べた後、配列に変換される「解決策」を見つけたので、行は次のように変更されました。

var eAttendings = this.get('attendings').toArray();

私の素敵なエラーは次のとおりです。

TypeError: fullName is undefined
var nameParts = fullName.split(":"),

これは、私の ajax リクエストが開始される前に Firebug で発生します。正確な意味や修正方法がわかりません...

とにかく、私の ajax リクエストが機能しているかどうかを試したかったので、curl で試してみました。

curl --request PUT localhost:3000/events/521b97ef5ef9095ba211bf70 --data "id=521b97ef5ef9095ba211bf70&attendings=521b7eda99027121d1533015"

答えは次のとおりです。

{"errors":{"attendings":["is invalid"]}}

そして、ベイクエンドは422 Unproccesable entity答えを返しています...このフィールドでモデルの検証を行っていないため、ここで何が起こっているのかわかりません... Railsイベントコントローラーでの更新アクションは次のとおりです。

  def update
    e = Event.find(params[:id])
    u = User.find(params[:attendings])

    if params[:attendings]
      e.attendings << u
      e.save
      respond_with e, api_template: :general_event, status: :no_content
    end   end

最後の詳細: 私は Ember 1.0.0.rc6、jQuery 1.10.2、および gemsacts_as_apiactive_model_serializersRails で使用しています。

要約すると、Ember で PUT リクエストだけを実行して、has_many_and_belongs_toマクロ(トランザクション、jQuery、またはその他を使用) を介してイベントに参加しているユーザーを追加したいと考えています。

4

0 に答える 0