Миграция Rails жалуется на неопределенный метод `присоединения 'с помощью скрепки

Лемми просто предваряет это, говоря, что я новичок в Rails.

Наше приложение использует скрепку (3.2.4) для управления вложениями, и, как обычно, я создал миграцию, которая выглядит примерно так:

class AddAttachmentPhotoToPhpfoxUsers < ActiveRecord::Migration
  def self.up
    change_table :phpfox_user do |t|
      t.attachment :photo
    end
  end

  def self.down
    drop_attached_file :phpfox_user, :photo
  end
end

(Это называется phpfox_user, потому что мы должны строить поверх устаревшей базы данных)

Все отлично, работает нормально. Однако мы также должны управлять двумя базами данных и миграциями в них, поэтому я изменил миграции в соответствии с предложениями в этом посте:

http://excid3.com/blog/rails-activerecord-multiple-databases-and-migrations

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

Однако теперь миграция скрепок не работает, так как не удается найти тип вложения. Я предполагаю, что он больше не входит в область видимости или не привязан к объекту таблицы. Кто-нибудь знает, что мне делать, чтобы ввести его, я пробовал добавить в модуль require 'paperclip', но это не помогает.

Я также пробовал использовать помощник add_attachment, но он тоже не найден.

Мы используем Rails 3.2.13 и Ruby 2.0.0.

изменить: опечатка


person dochead    schedule 05.07.2013    source источник
comment
Переключите db: stackoverflow.com/questions/1404620/   -  person DeveloperX    schedule 05.07.2013
comment
Я не уверен, как это поможет? Я особенно хотел бы, чтобы миграции выполнялись автоматически во всех средах, и мне не приходилось вручную переключать базы данных.   -  person dochead    schedule 05.07.2013


Ответы (3)


Хорошо, разобрался. Помощник add_attachment определен в файле schema.rb. Не знаю, правильно это или нет, но если я включу:

include Paperclip::Schema

в файл, он работает.

person dochead    schedule 05.07.2013
comment
Я добавил эту строку в свой файл миграции, и она сработала. Спасибо, везде искал это решение! - person furman87; 11.02.2014

Убедитесь, что скрепка (возможно, последняя версия) присутствует в вашем Gemfile, запустите bundle install, а затем запустите

bundle exec rake db:migrate

Это должно просто работать.

person Rishav Rastogi    schedule 05.07.2013
comment
Нет, я пробовал это несколько раз. Драгоценный камень установлен нормально и работает, просто скрепка, похоже, не прикрепляется к файлу миграции, если он находится в подкаталоге в db / migrations. - person dochead; 05.07.2013

Я использую рубин 2.1.5 и рельсы 4.2.1

Я вытащил код из git после того, как мой партнер добавил драгоценный камень скрепки

Я загрузил драгоценный камень скрепки, добавил в свой гем-файл (наши гем-файлы разные), но не указал версию скрепки.

Поэтому я был удивлен, что мне пришлось использовать has_attached_file (который предназначен для старых версий скрепки)

Мне пришлось:

1) включить paperclip :: Schema в schema.rb 2) заменить вложение на has_attached_file 3) rake db: migrate

person Andy Rossignol    schedule 08.07.2015