所以这已经被问过,但没有令人满意的答案。Rails has_one build_association在保存之前删除记录
考虑两个型号,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)
?似乎没有多大意义。
非常感谢解释为什么这是以这种方式实现的,以及如何处理这个问题。
谢谢!