Клон (иначе дубликат) Запись

Я должен копировать запись с теми же атрибутами оригинала кроме идентификатора курса. Я делаю:

В представлении:

<%= link_to "Duplicate", :action => "clone", :id => Some_Existing_ID %>

И в контроллере:

def clone
  @item = Item.find(params[:id]).clone

  if @item.save
    flash[:notice] = 'Item was successfully cloned.'
  else
    flash[:notice] = 'ERROR: Item can\'t be cloned.'
  end

  redirect_to(items_path)
end      

Но ничего не происходит! В Консоли я выяснил, что клон генерирует копию без идентификатора.

Какие-либо идеи?

*> BTW: Я выполняю направляющие 2.3.5 и Ruby 1.8

5
задан Ben Orozco 15 January 2010 в 08:19
поделиться

2 ответа

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

Попробуйте использовать @item.save! вместо @item.save и проверьте, не поднято ли исключение. Также можно попробовать код непосредственно в консольном экземпляре.

In Console I figured out that clone generates the copy without ID.

Это правда. #clone на самом деле создает клон, но не сохраняет запись. Поэтому в своем действии необходимо вызвать метод save, что на самом деле и происходит с

if @item.save # <-- here you save the record
  flash[:notice] = 'Item was successfully cloned.'
else
  flash[:notice] = 'ERROR: Item can\'t be cloned.'
end
3
ответ дан 14 December 2019 в 01:08
поделиться

В скрипте / консоли Это работает для меня

>> i = Item.find(:first)
=> #<Item id: 1, name: "Item 1", description: "This is item 1!", created_at: "2010-01-03 21:51:49", updated_at: "2010-01-05 18:25:42">
>> i2 = i.clone
=> #<Item id: nil, name: "Item 1", description: "This is item 1!", created_at: "2010-01-03 21:51:49", updated_at: "2010-01-05 18:25:42">
>> i2.save
=> true
>> i2
=> #<Item id: 2, name: "Item 1", description: "This is item 1!", created_at: "2010-01-03 21:51:49", updated_at: "2010-01-05 18:25:42">

, клонирование действительно не увеличивает идентификационное поле (логическое, поскольку это действие базы данных). После сохранения элемента идентификатор сейчас обновляется, и моя база данных содержит клон.

Так что это работает . Вы также можете разделить первую строку, поэтому найдите оригинал и клонировать его в новую переменную и печать ( Logger.debug @ item.inspect ) Оба к консоли, чтобы увидеть, успешно ли клонирование. Также распечатайте клонированный предмет после сохранения, чтобы увидеть, изменено ли вещи или нет.

2
ответ дан 14 December 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: