Rails附加在多态模型上

时间:2013-07-25 22:59:52

标签: 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-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])

我点击提交时失败了。根据我尝试的方式,有不同的错误。通过这段代码,我发布了我的Unkown属性:可附加。

我尝试了许多不同的东西(fields_for:attachment(s),不同的模型选项等),但我现在真的需要一些帮助。

2 个答案:

答案 0 :(得分:1)

@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'

答案 1 :(得分:0)

Job有许多附件,而不仅仅是一个附件。此外,该关系称为附件,不可附加(传递的“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作为嵌套表单,如下面的https://github.com/ryanb/nested_form