Newbie on Rails 3.2.14, testing on Heroku, uploading image files to S3 with s3_direct_upload gem.
I've got the gem working fine. Drag and drop, progress bars and direct upload to S3 work great. The upload is tied to an Attachment model. The new record is created properly on upload. Fine so far.
The issue I'm having is that I want to set the parent_id
field of the new record but don't know how to pass it in. The gem doesn't use a conventional form to submit the upload, it's handled by via javascript:
<%= s3_uploader_form callback_url: attachments_url, callback_param:
"attachment[attachment_url]", id: "myS3Uploader" do %>
<%= file_field_tag :file, multiple: true %>
<% end %>
The create action in attachments_controller.rb
:
def create
@attachment = Attachment.create(params[:attachment])
end
calls a javascript view 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 %>
which checks if the record save worked and adds the new upload thumbnail to the current view.
Since I'm not dealing with a regular form or create
action I'm a bit stumped.
I can set default values in the Attachment model with a before_save
:
before_save :set_defaults
def set_defaults
self.name = "Photo"
self.parent_id = 1
end
but the parent_id
will be defined on the page where the uploads are done, during the creation of the parent object (i.e. a blog post).
I know I should be using has_many
and belongs_to
and they're set up and working fine but since I'm not using a conventional form to submit the data I don't know how to assign the parent_id.
I've tried passing parent_id
in the form and accessing it in the model:
<%= s3_uploader_form callback_url: attachments_url(:parent_id => 99), callback_param:
"attachment[attachment_url]", id: "myS3Uploader" do %>
It didn't work and I know I'm not supposed to be accessing params inside the model anyway.
Any help to get me past this point would be greatly appreciated.