Как сохранить дублирующуюся запись в базе данных?

#mysql #ruby-on-rails #ruby

#mysql #ruby-on-rails #ruby

Вопрос:

Моя таблица содержит два столбца Title и Description. Я хочу предоставить пользователю функциональность для создания дублирующейся страницы для существующей страницы.

Like для существующей страницы базы данных хранит значение like.

Title1 , Description1

Когда пользователь нажимает на кнопку дублировать страницу, я хочу создать дублирующуюся запись для существующей страницы следующим образом.

1) Щелкните первый раз

Copy_1_Title1, Description1

2) Щелкните второй раз

Copy_2_Title1, Description1

Как я могу создать этот тип функциональности? Какой должна быть моя база данных для этого? Это правильный способ?

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

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

Ответ №1:

Я думаю, вам следует создать третий столбец и назвать его, например, copy_number, а затем перед созданием записи вы можете найти ее по названию, и если название существует, вы можете получить значение copy_number и увеличить его. Затем вы можете использовать это число для отображения заголовков по своему усмотрению:
«copy_#{record.copy_number}_#{record.title}» или что-то вроде этого.

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

1. Я бы назвал версию столбца, поскольку это то, что здесь действительно происходит. Но в остальном вы совершенно правы. Проголосовать за

Ответ №2:

@bor1s предложил очень правильное решение.

Но для интереса вы можете использовать этот метод для дублирования 🙂

 class Page < AR::Base
  def duplicate
    # new_page = self.clone
    new_page = Page.new self.attributes.except(:id, :created_at, :updated_at)
    copy = (self.title.match(/Copy_(d) .*/).try([1]) || 0)   1
    new_page.title = "Copy_#{copy}_#{self.title}"
    new_page.save
  end
end
  

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

1. Спасибо за вашу оценку

2. @flOOr self.clone не изменит updated_at и created_at также для нового объекта. Есть ли какой-либо способ создать клон без временных меток?