Какой самый простой способ дублировать запись активной записи?

Вы можете использовать регулярные выражения. Вот функция с предложениями @ janm.

class String
    def is_i?
       !!(self =~ /\A[-+]?[0-9]+\z/)
    end
end

Отредактированная версия в соответствии с комментарием от @wich:

class String
    def is_i?
       /\A[-+]?\d+\z/ === self
    end
end

Если вам нужно только проверить положительные числа

  if !/\A\d+\z/.match(string_to_check)
      #Is not a positive number
  else
      #Is all good ..continue
  end  
394
задан tereško 21 January 2013 в 08:27
поделиться

3 ответа

Для получения копии используйте клон (или дубликат для направляющих 3.1) метод:

# rails < 3.1
new_record = old_record.clone

#rails >= 3.1
new_record = old_record.dup

Тогда можно измениться, какой бы ни поля Вы хотите.

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

направляющие 3,1 клона являются мелкой копией, используйте дубликат вместо этого...

601
ответ дан waldo 21 January 2013 в 08:27
поделиться

В зависимости от Ваших потребностей и стиля программирования, можно также использовать комбинацию нового метода класса и слияния. Из-за отсутствия лучшего простой пример, предположите, что Вам запланировали задачу для определенной даты, и Вы хотите копировать его на другую дату. Фактические атрибуты задачи не важны, таким образом:

old_task = Task.find(task_id)
new_task = Task.new(old_task.attributes.merge({:scheduled_on => some_new_date}))

создаст новую задачу с :id => nil, :scheduled_on => some_new_date, и все другие атрибуты то же как исходная задача. Используя Task.new, необходимо будет явно звонить, сохраняют, поэтому если Вы хотите сохраненный автоматически, изменяете Task.new на Task.create.

Мир.

71
ответ дан Phillip Koebbe 21 January 2013 в 08:27
поделиться

Я обычно просто копирую атрибуты, изменяясь независимо от того, что мне нужно изменение:

new_user = User.new(old_user.attributes.merge(:login => "newlogin"))
23
ответ дан Luís Ramalho 21 January 2013 в 08:27
поделиться
Другие вопросы по тегам:

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