在Rails中创建签入时创建/更新位置

时间:2012-06-17 23:38:53

标签: mysql ruby-on-rails database

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

Checkin belongs_to:location and,a 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为

的Checkin,找不到ID = 314的位置

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

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

签入表有一个id(主键,自动增量)和note(varchar)

任何人都成功使用accepts_nested_attributes_for?

1 个答案:

答案 0 :(得分:1)

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

我将Locations的id从主要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