所以這已經被問過,但沒有令人滿意的答案。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)
?似乎沒有多大意義。
非常感謝解釋爲什麼這是以這種方式實現的,以及如何處理這個問題。
謝謝!