Ruby on rails 基于多态模型的Rails附件

Ruby on rails 基于多态模型的Rails附件,ruby-on-rails,ruby-on-rails-3.2,carrierwave,polymorphic-associations,rails-models,Ruby On Rails,Ruby On Rails 3.2,Carrierwave,Polymorphic Associations,Rails Models,我尝试了很多很多东西,所以我甚至不确定应该给出哪些代码/错误。我将给出最通用的代码 模型:工作、附件 附件-通过可附件的多态关联 工作模式 has_many :attachments, as: :attachable accepts_nested_attributes_for :attachments 附着模型 belongs_to :attachable, polymorphic: true 作业视图 = simple_form_for(@job, html: { class: 'form

我尝试了很多很多东西,所以我甚至不确定应该给出哪些代码/错误。我将给出最通用的代码

模型:工作、附件
附件-通过可附件的多态关联

工作模式

has_many :attachments, as: :attachable
accepts_nested_attributes_for :attachments
附着模型

belongs_to :attachable, polymorphic: true
作业视图

= simple_form_for(@job, html: { class: 'form-horizontal', multipart: true }) do |f|
= f.fields_for :attachable do |a|
  = a.file_field :file_url
= f.button :submit, class: 'btn-primary offset1'
作业控制器

def update
  @job = Job.find(params[:id])
if @job.update_attributes(params[:job])
当我点击提交时失败。不同的错误取决于我怎么做。通过我发布的代码,我得到了未知属性:Attachable


我尝试了很多不同的东西(附件字段、不同的型号选项等等),但我现在真的需要一些帮助。

@job
:attachments
,而不是
:attachable
。如果
@job
当前没有任何附件,则需要提供附件。请尝试:

= simple_form_for(@job, html: { class: 'form-horizontal', multipart: true}) do |f|

  - # form for existing attachments
  %strong Attachments
  = simple_fields_for :attachments do |a|
    = a.input :file_url

  - # form for a new attachment
  %strong Add Attachment
  = f.simple_fields_for :attachments, @job.attachments.build do |a|
    = a.input :file_url

  = f.button :submit, class: 'btn-primary offset1'

作业有许多附件,而不仅仅是一个。此外,该关系称为attachments,而不是attachable(传递的“as”选项只是为了让Rails知道镜像关系)。表单应如下所示:

= simple_form_for(@job, html: { class: 'form-horizontal', multipart: true }) do |f|
  = f.fields_for :attachments do |a|
    = a.file_field :file_url
  = f.button :submit, class: 'btn-primary offset
编辑:
在您使用“@job.attachments.build”生成一个或多个附件之前,表单不会显示任何附件。另一种选择是对嵌套表单使用gem,如下所示。

对附件执行
字段时会出现什么错误?你能发布日志吗?我在@job.update\u attributes行上得到未知属性:附件当我这样做时,表单不会呈现。在HTML中根本没有显示。我已经调整了我的答案,以说明缺少的字段。如果作业还没有附件,则需要为
simple\u fields\u或
helper的
fields\u提供附件。执行此操作时,表单不会呈现。在HTML中根本没有显示。@mattt-对答案进行了澄清。