所以这已被问过,但没有令人满意的答案.
考虑两个模型,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
动作实际上会破坏该关联,从而失去当前的订阅记录.
现在,我可以简单地检查订阅的存在并重定向,如下所示:
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)
?似乎没有多大意义.
非常感谢解释为什么以这种方式实现它以及如何处理这个问题.
谢谢!