我尝试过很多很多东西,所以我甚至不确定要提供哪些代码/错误。我会给出最通用的代码。
模特:工作,附件
附件 - 通过可附加的多态关联
工作模式
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),不同的模型选项等),但我现在真的需要一些帮助。
答案 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。