0

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

模型:Job、Attachment
Attachment——通过attachable的多态关联

工作模式

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

当我点击提交时它失败了。有不同的错误取决于我如何尝试去做。使用我发布的这段代码,我得到未知属性:可附加。

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

4

2 回答 2

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'
于 2013-07-25T23:57:48.800 回答
0

约伯有很多执着,不只是一个。此外,该关系称为附件,而不是可附加的(传递的“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

于 2013-07-25T23:59:12.650 回答