2013-08-09 5 views
1

Newbie on Rails 3.2.14, тестирование на Heroku, загрузка файлов изображений на S3 с помощью s3_direct_upload gem.Как установить parent_id с помощью s3_direct_upload gem?

У меня есть камень, который отлично работает. Перетаскивание, индикаторы выполнения и прямая загрузка на S3 отлично работают. Загрузка связана с моделью вложения. Новая запись создается правильно при загрузке. До сих пор.

Проблема, с которой я сталкиваюсь, заключается в том, что я хочу установить поле новой записи, но не знаю, как ее передать. Драгоценный камень не использует обычную форму для отправки, ее обрабатывают на с помощью JavaScript:

<%= s3_uploader_form callback_url: attachments_url, callback_param: 
"attachment[attachment_url]", id: "myS3Uploader" do %> 
    <%= file_field_tag :file, multiple: true %> 
<% end %> 

создать действие в attachments_controller.rb:

def create 
    @attachment = Attachment.create(params[:attachment]) 
end 

вызывает яваскрипт вида create.js.erb:

<% if @attachment.new_record? %> 
    alert("Failed to upload attachment: <%= j @attachment.errors.full_messages.join(', ').html_safe %>"); 
<% else %> 
    $("#attachments").prepend("<%= j render(@attachment) %>"); 
<% end %> 

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

Поскольку я не имею дело с обычной формой или create действием, я немного в тупике.

Я могу установить значения по умолчанию в модели Attachment с before_save:

before_save :set_defaults 

def set_defaults 
    self.name = "Photo" 
    self.parent_id = 1 
end 

но parent_id будет определен на странице, где делаются закачки, при создании родительского объекта (т.е. блог после).

Я знаю, что должен использовать has_many и belongs_to, и они настроены и работают нормально, но поскольку я не использую обычную форму для отправки данных, я не знаю, как назначить parent_id.

Я попытался прохождения parent_id в форме и доступа к ней в модели:

<%= s3_uploader_form callback_url: attachments_url(:parent_id => 99), callback_param: 
"attachment[attachment_url]", id: "myS3Uploader" do %> 

Это не сработало, и я знаю, что я не должен быть доступ к Params внутри модели в любом случае.

Любая помощь, которая поможет мне пройти мимо этой точки, была бы весьма признательна.

ответ

1

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

Итак, я был на правильном пути, проходя в (:parent_id => 99), но я не должен был использовать его в модели, я должен использовать его в контроллере.

Я изменил метод create в контроллере для извлечения объекта проекта Parent я создал и сделать новый Attachment запись ребенок из него:

def create 
    @parent = Parent.find(params[:parent_id]) 
    @attachment = @parent.attachments.create(params[:attachment]) 
end 

Значение :parent_id прошло в доносился из «новой» родительской формы, поэтому на самом деле это было (:parent_id => @parent.id).

Все нормально.Это был просто мой полный недостаток опыта, удерживающий меня :)

+0

Я столкнулся с той же проблемой, но с использованием Rails 4. Можете ли вы рассказать о том, как «образ» может определить parent_id, когда изображение по существу загружается в удаленная форма? – RubyNewbie

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