我正在尝试在我的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?
答案 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