Я использую скрепку для загрузки своих документов в Amazon S3.Я хотел бы автоматически создать корзину с идентификатором моих проектов при загрузке нового документа.
Поэтому в моем контроллере у меня есть это:
def new
@pmdocument = Pmdocument.new
@pmdocument.projectmilestone_id=params[:projectmilestone_id]
, где projectmilestone_id - этоForeign_key для моего проекта (который будет использоваться в качестве имени моего сегмента)
Моя модель выглядит следующим образом:
class Pmdocument < ActiveRecord::Base
belongs_to :projectmilestone
attr_accessible :id, :name, :description, :projectmilestone_id, :pmdoc, :projectmilestone_attributes
attr_protected :pmdoc_content_type, :pmdoc_size
accepts_nested_attributes_for :projectmilestone, :allow_destroy => false
has_attached_file :pmdoc,
:storage => :s3,
:bucket => self.projectmilestone_id.to_s,
:s3_credentials => File.join(Rails.root, 'config', 's3.yml')
Когда я загружаю страницу, я получаю эту ошибку: неопределенный метод `projectmilestone_id 'для #
Я проверил свой контроллер и там правильно загружено поле projectmilestone_id.
Я попытался изменить строку сегмента на :bucket => self.name
, а затем ошибка исчезла.
Модель работает нормально, потому что projectmilestone_id правильно хранится в БД.
Я предполагаю, что он может быть связан с доступными атрибутами, но, похоже, тоже хорошо.
Что не так?Большое спасибо !!!
Я действительно не понимаю:
Я решил больше не менять свое ведро (плохая идея, так как имя должно быть уникальным для всех S3), новместо этого изменить мой путь.
Это код:
:path => proc { |attachment| "#{attachment.istance.projectname}/:attachment/:id/:basename.:extension" },
Первая папка с именем моего проекта не создана.Если я заменяю имя проекта именем или даже описанием (другое поле pmdocuments), это работает, но не с именем проекта.Конечно, я проверил, что имя проекта правильно заполнено.Причина в другом месте.
Есть подсказка?