ruby-on-rails - Rails has_one build_association 在保存前删除记录

标签 ruby-on-rails rest ruby-on-rails-4

所以之前有人问过这个问题,但没有令人满意的答案。

考虑两个模型,User , 和 Subscription关联如下:

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 action 实际上会破坏关联,从而丢失当前的订阅记录。

现在,我可以简单地检查订阅的存在并像这样重定向:
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) ?似乎没有多大意义。

非常感谢您解释为什么以这种方式实现以及您将如何处理此问题。

谢谢!

最佳答案

我今天遇到了这个问题,我同意当你调用 build 时从数据库中删除一些东西是一个非常意外的结果(导致我们有错误的数据)。正如您所建议的,您只需执行 Subscription.new(user: user) 即可轻松解决问题。我个人认为它的可读性并不比 user.build_subscription 低得多。

关于ruby-on-rails - Rails has_one build_association 在保存前删除记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20945853/

相关文章:

ruby-on-rails - Rails语法错误为每个循环分配一个变量

ruby-on-rails - 如何跟踪 Ruby on Rails 的部分页面浏览量或分析?

c# - 如何通过uploadcare中的rest api删除文件

java - Dropwizard 在有效 GET 上返回 400

ruby - Rails简单验证码验证永远行不通吗?即使正确

ruby-on-rails - Rails 4 has_one 关联表单未构建

sql - rails : Purchases vs Orders

ruby-on-rails - session cookie httponly false rails 3.1

java - 错误后的动态结果(列表或对象)

ruby-on-rails - Rails_Admin 多个 'User' 模型 + 设计