これは前に尋ねられましたが、満足のいく回答はありません。Rails has_one build_associationは保存する前にレコードを削除します
は二つのモデル、User
、そのように関連付けられているSubscription
考えてみましょう:SubscriptionsControllerの内部
class User < ActiveRecord::Base
has_one :subscription, dependent: :destroy
end
class Subscription < ActiveRecord::Base
belongs_to :user
end
を、私はサブスクリプションがすでに存在することを考えると、この
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
しかし、それはすべてのことがエレガントないないようです。
は、ここに私の質問
はちょうど協会ため仮レコードが破壊的でない建物べきではないのですか? new
がGETリクエストでアクセスされているため、RESTfulルーティングに違反していませんか?はでレコードを変更しないでください。
おそらく私は何か間違っています。私はレコードを別に作るべきですか?多分Subscription.new(user_id: user.id)
経由ですか?あまり意味がないようです。
これがなぜこのように実装されているのか、これをどのように処理するのかについての説明がありがたいですか。
ありがとうございます!