ruby-on-rails – 努力理解如何在rails中保存模型和关联
我是
ruby和rails的新手,我希望尽可能遵循编码标准和惯例,所以我不会养成任何坏习惯.我有两个模型:课程和位置.课程属于一个位置,因为课程只能有一个位置.一个位置has_many课程,因为一个位置可以由多个课程共享.
创建课程时,可能已存在通过其ID找到的位置.或者该位置可能尚不存在,在这种情况下,必须创建新的位置记录.我的课程控制器具有以下创建操作. def create @course = Course.new(params[:course]) if params[:course][:location][:id].blank? @course.location = Location.create(params[:course][:location]) else @course.location = Location.find_by_id(params[:course][:location][:id]) end @course.save respond_with @course end 请注意,这是一个仅使用JSON响应的REST API.使请求的javascript以与GET请求返回的格式相同的方式发布JSON数组 { "course": { "title":"US History","credits":"3","max_students":"100","location": { "id":"","building":"Freedom Hall","room":"301" } } } or { "course": { "title":"US History","location": { "id":"12",# this is the only difference "building":"Freedom Hall","room":"301" } } } >与我读过的所有例子相比,这段代码看起来并不那么优雅.是否有更好的方法来考虑它? 非常感谢您的帮助! 解决方法
您可以使用find_or_initialize_by_id清理它.这应该工作:
def create @course = Course.new(params[:course]) @course.location = Location.find_or_initialize_by_id(params[:course][:location][:id],params[:course][:location]) @course.save respond_with @course end 关于你的第二个问题,在你的代码中,如果Location.create(或Location.find)引发异常(因为它们会先发生),将不会调用@ course.save.但是,我在上面对它进行编码的方式,异常将发生在代码中的同一点,当调用save时,此时也会保存关联. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |