0

我正在尝试在我的 Rails 项目中保存签入时创建/更新位置,但是遇到了麻烦。

一个 Checkin belongs_to :location 和一个 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= 的签到

我不确定我在做什么正确..?如果它不存在,我希望它创建具有特定 ID 的位置,如果它确实存在,则更新相同的位置(根据 location_id)。

位置表有一个 id(主键)和名称(varchar)

checkin 表有一个 id(主键,自增)和 note(varchar)

任何人都成功地使用了accepts_nested_attributes_for?

4

1 回答 1

1

这是我为解决问题所做的:

我将 Locations 的 id 从主要更改为主要+自动增量,并停止尝试手动设置它。我决定单独存储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 回答