0

Rails プロジェクトでチェックインを保存する際に場所を作成/更新しようとしていますが、問題が発生しています。

チェックインは :location に属し、ロケーションは has_many :checkins に属します

私はaccepts_nested_attributes_for :location, :allow_destroy => true自分のチェックイン モデルで使用しており、次のようにチェックインを作成するときに場所を作成しようとしています。

POST "checkin[note]=this-is-great&checkin[user_id]=123&checkin[location_attributes][name]=popeyes&checkin[location_attributes][id]=314" to http://localhost:3000/checkins.json

ただし、それを実行するたびに、エラーがスローされます

ID=314 のチェックイン ID= の場所が見つかりませんでした

私は何をしているのか分かりません..?Location が存在しない場合は特定の ID で Location を作成し、存在する場合は同じ場所を (location_id に従って) 更新したいと思います。

ロケーション テーブルには ID (主キー) と名前 (varchar) があります。

チェックイン テーブルには ID (主キー、自動インクリメント) とメモ (varchar) があります。

accept_nested_attributes_for で成功した人はいますか?

4

1 に答える 1

1

これは私が問題を解決するためにしたことです:

LocationsのIDをprimaryからprimary+auto-incrementに変更し、手動で設定するのをやめました。保存しようとしたfoursquare_idと同じにする代わりに、foursquare_idを個別に(別の列に)保存することにしました。

私のチェックインモデルは次のようになります。

  belongs_to :location, :autosave => true
  accepts_nested_attributes_for :location, :allow_destroy => true

 def autosave_associated_records_for_location
    if Location.find_by_foursquareID(location.foursquareID)
      self.location = Location.find_by_foursquareID(location.foursquareID)
    else
      self.location.save!
      self.location = self.location
    end
  end
于 2012-06-18T04:52:43.003 に答える