Rails, инициализируйте объект идентификатором и сохраните его зарезервированным

#ruby-on-rails

#ruby-on-rails

Вопрос:

Привет всем, я пытаюсь понять, как справиться с подобной ситуацией.

У меня есть модель

 Class Content < Activerecord

 has_many                :elements
 has_many                :assets, :dependent => :destroy

end
  

У меня есть форма, и, конечно, в моем контроллере у меня есть

 def new
 @content = Content.new
end
  

Давайте возьмем «активы».
Ресурсы — это файлы, такие как js, css, и я использую виджет jquery внутри моей формы для их загрузки.

Элементы подобны форме: я создаю их внутри «новой формы».

В фактической версии моего приложения в моем контроллере я использую

 def new
 @content = Content.create
end
  

Я создаю и сохраняю в БД каждый контент, поэтому у меня есть идентификатор, и я использую идентификатор для загрузки ресурсов с помощью виджета jquery и для создания страниц с использованием ajax post.

Используя «Content.new», у меня нет никакого идентификатора, я инициализирую свою модель контента, и у меня нет никакого идентификатора.

Есть ли какой-либо обходной путь? Возможно ли инициализировать с идентификатором и зарезервировать этот идентификатор, чтобы избежать переопределения? Или я должен изменить свой интерфейс?

Комментарии:

1. как create выглядит ваш?

Ответ №1:

Если ваш контент будет принадлежать какой-либо другой модели, тогда вы можете создать объект с некоторым идентификатором!

 Class Content < Activerecord
 belongs_to :user
 has_many                :elements
 has_many                :assets, :dependent => :destroy

end

Class User < Activerecord
  has_many :contents
end

Content.create(user_id: 1)

will return
#<Content id: 10008, user_id: 1 >
  

Ответ №2:

Сохраните пустое содержимое, чтобы создать пустую запись или зарезервировать запись в вашей базе данных.

 def new
 @content = Content.create
 @content.save!
end
  

Но имейте в виду, что если вы резервируете идентификатор / запись в базе данных, вам нужно будет уничтожить его, если ваша форма по какой-либо причине завершится с ошибкой. Или работайте с пустыми записями в случае сбоя.