【问题标题】:How do i set a parent_id using s3_direct_upload gem?如何使用 s3_direct_upload gem 设置 parent_id?
【发布时间】:2013-08-11 18:21:31
【问题描述】:

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 操作,我有点难过。

我可以使用before_save 在附件模型中设置默认值:

before_save :set_defaults

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

parent_id 将在创建父对象(即博客文章)期间在完成上传的页面上定义。

我知道我应该使用has_manybelongs_to,它们已经设置好并且工作正常,但是由于我没有使用常规表单来提交数据,所以我不知道如何分配 parent_id。

我尝试在表单中传递parent_id 并在模型中访问它:

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

它不起作用,我知道我不应该访问模型内​​的参数。

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

【问题讨论】:

    标签: ruby-on-rails has-many belongs-to


    【解决方案1】:

    好的,所以我在这里阅读了很多个问题和答案,最后自己拼凑起来。

    所以我在传递(:parent_id =&gt; 99) 时走在正确的轨道上,但我不应该尝试在模型中使用它,我应该在控制器中使用它。

    我更改了控制器中的 create 方法,以获取我创建的草稿 Parent 对象,并使新的 Attachment 记录成为它的子对象:

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

    传入的:parent_id 的值来自“新”父表单,因此它实际上是(:parent_id =&gt; @parent.id)

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

    【讨论】:

    • 我在使用 Rails 4 时遇到了同样的问题。您能否详细说明当图像基本上以远程样式形式上传时,“图像”如何确定 parent_id?
    猜你喜欢
    • 1970-01-01
    • 2013-06-07
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 2019-04-05
    • 2016-04-17
    • 1970-01-01
    相关资源
    最近更新 更多