Так что это было задано ранее, но без удовлетворительных ответов.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
is разрушительный, а это означает, что просто посещения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)
? Кажется, не имеет большого смысла.
Был бы очень благодарен за объяснение, почему это реализовано таким образом и как вы собираетесь справляться с этим.
Спасибо!