Rails 3.2.14 上的新手,在 Heroku 上进行测试,使用 s3_direct_upload gem 将图像文件上传到 S3。
我的宝石工作正常。拖放、进度条和直接上传到 S3 效果很好。上传与附件模型相关联。新记录在上传时正确创建。到目前为止还好。
我遇到的问题是我想设置parent_id
新记录的字段但不知道如何传递它。gem 不使用常规表单提交上传,它是通过 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
调用 javascript 视图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 %>
它没有用,我知道无论如何我都不应该访问模型内的参数。
任何帮助我度过这一点的帮助将不胜感激。