Как основать новый объект модели на старом объекте модели, но разрешить настройку определенных полей - PullRequest
1 голос
/ 19 января 2012

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

Метод класса модели, который я добавил (def self.copy(item)) ниже, вроде как работает, но он только настроен для точного клонирования элемента; Я хочу, чтобы он клонировал некоторые поля и позволил пользователю вводить данные для остальных.

Например, когда я копирую элемент, копируется и его номер, но я бы предпочел дать пользователю возможность ввести уникальный номер - как мне это сделать?

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

class Task < ActiveRecord::Base
  belongs_to :department
  belongs_to :item
  belongs_to :customer
end

class Item < ActiveRecord::Base
has_many :tasks

  def self.copy(item)
    newitem = item.clone
    newitem.tasks << item.tasks.map(&:clone)
    return newitem
  end
end

1 Ответ

4 голосов
/ 19 января 2012

Это создаст новый элемент со всем скопированным, кроме поля 'item_number'.

def self.copy(old_item)    
  Item.new(old_item.attributes.merge({:item_number => nil}))
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...