Я нашел эти ответы немного сложными для подражания.Один ответ показывает это:
@post = Post.new(@existing_post.attributes)
, который не будет работать, поскольку он также передаст значения id и метки времени.Я использовал .dup, чтобы исправить это, и я показываю это в своем ответе.
Вот как я добился создания нового элемента из существующего элемента.
Модель предназначена для продукта, контроллера Products_Controller.rb.Мы собираемся добавить новое действие в контроллер под названием COPY, и мы собираемся связать его с представлением SHOW для существующего Продукта и сделать заполненный НОВЫЙ вид готовым для редактирования и сохранения.
Сначала мы создаем маршрут для действия копирования в route.rb
resources :Products do
member do
get 'copy'
end
end
Затем выполняется действие копирования в Products_controller.rb
def copy
@source = Product.find(params[:id])
@product = @source.dup
render 'new'
end
Теперь нам нужно добавить ссылку на SHOWчтобы вызвать наше действие копирования.
<%= link_to "copy", copy_product_path(params[:id]) %>
Это сработало для меня.Я надеюсь, что это работает для вас, и что ответ достаточно прост, чтобы следовать.