2013-10-10 5 views
1

В моем контроллере у меня есть объект @attach и когда я проверить это, он имеет значение, какэкстракта значений атрибутов из ActiveRecord объекта запроса в рельсах 2,3

[#<MessageAddlAttachment id: 80, reminder_id: 112, msg_attachment_file_name: "24.png", msg_attachment_content_type: "image/png", msg_attachment_file_size: 272368, created_at: "2013-10-10 12:04:37", updated_at: "2013-10-10 12:04:37">, #<MessageAddlAttachment id: 81, reminder_id: 112, msg_attachment_file_name: "37.png", msg_attachment_content_type: "image/png", msg_attachment_file_size: 333986, created_at: "2013-10-10 12:04:37", updated_at: "2013-10-10 12:04:37">] 

Так что теперь после некоторой операции мне нужно создать запись в этой таблице MessageAddlAttachment с различными идентификаторами. Как я могу это достичь. Я попробовал dup, но у него будут одинаковые идентификаторы. Пожалуйста, помогите

ответ

2

dup ваш друг в рельсах 4. создаст копию, но удаляет значение ID:

u = User.first 
=> #<User id: 1, ...> 
u.dup 
=> #<User id: nil, ...> 
u.dup.save 
    (0.2ms) begin transaction 
... 
1

Начиная либо рельсы 3,2 или 3,1, вы хотите использовать dup. До этого вы должны использовать вместо этого clone. Это даст вам новые значения для поля id; вы можете обратить внимание на то, что происходит с вашими поля created_at и updated_at.

Еще одна проблема, о которой следует помнить, - это если у вас есть поля дат с утверждениями, которые говорят, что они должны быть после «сегодняшней даты», они могут быть действительными, когда исходная запись была сохранена, но не когда новая запись сохранена , Как вы решаете это, это будет зависеть от вашей ситуации; вы можете полностью отключить проверки при клонировании или изменить значения в новых записях.

+0

Я использовал метод клонирования, но как мне избежать клонирования клонированных атрибутов created_at и updated_at и сохранять их с правильными значениями. – rubyist

+0

В моей ситуации я хотел, чтобы записи имели исходные значения created_at, так что, вероятно, это то, что вы видите. Если вы хотите, чтобы они были обновлены, вам, вероятно, придется явно установить .created_at в Time.now и .save запись, которая должна обновить поле .updated_at для вас. – sockmonk

Смежные вопросы