Я должен копировать запись с теми же атрибутами оригинала кроме идентификатора курса. Я делаю:
В представлении:
<%= 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
Убедитесь, что поведение клонированной записи по умолчанию работает на вас. Клонированная запись может быть на самом деле недействительной согласно вашим правилам проверки.
Попробуйте использовать @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
В скрипте / консоли Это работает для меня
>> 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
) Оба к консоли, чтобы увидеть, успешно ли клонирование. Также распечатайте клонированный предмет после сохранения, чтобы увидеть, изменено ли вещи или нет.