1

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 %>

它没有用,我知道无论如何我都不应该访问模型内​​的参数。

任何帮助我度过这一点的帮助将不胜感激。

4

1 回答 1

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).

现在一切正常。只是我完全缺乏经验让我退缩了:)

于 2013-08-11T10:21:31.327 回答