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-对答案进行了澄清。