Rails has_one build_association在保存之前删除记录

 pS看云梦山水Tn 发布于 2023-02-06 12:37

所以这已被问过,但没有令人满意的答案.

考虑两个模型,UserSubscription相关联:

class User < ActiveRecord::Base
      has_one :subscription, dependent: :destroy
end

class Subscription < ActiveRecord::Base
      belongs_to :user
end

在SubscriptionsController里面,我有一个看起来像这样的新动作

def new
    user = User.find(params[:user_id])
    @subscription = user.build_subscription
end

鉴于用户记录已经存在订阅,我遇到了以下问题:

user.build_subscription破坏性的,这意味着简单地访问new动作实际上会破坏该关联,从而失去当前的订阅记录.

现在,我可以简单地检查订阅的存在并重定向,如下所示:

def new
    user = User.find(params[:user_id])
    if user.subscription.present?
        redirect_to root_path
    else
        @subscription = user.build_subscription
    end
end

但这似乎并不那么优雅.

这是我的问题

不应该只是建立一个协会的暂定记录不是破坏性的?这是否违反RESTful路由,因为new是通过GET请求访问的,不应该修改记录?

或者也许我做错了什么.我应该以不同方式建立记录吗?也许通过Subscription.new(user_id: user.id)?似乎没有多大意义.

非常感谢解释为什么以这种方式实现它以及如何处理这个问题.

谢谢!

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有