这个问题涉及 model 之间的关系,描述会比较长,请耐心一点。如果我没有说清楚,麻烦指正。
class Attachment
attr_accessible :attachment, :attachmentable_id, :attachmentable_type
belongs_to :attachmentable, polymorphic: true
end
class Task
attr_accessible :content
has_one :homework
end
class Homework
attr_accessible :content, :task_id
belongs_to :task
has_many :attachments, as: :attachmentable
end
一个 task 可以有一个 homework,而一个 homework 可以包含很多的 attachment。 那么,我这里想要在创建 homework 的同时,创建 attachment。对 Homework 修改如下
class Homework
attr_accessible :content, :task_id
belongs_to :task
has_many :attachments, as: :attachmentable
accepts_nested_attributes_for :attachments <------
end
然后 view 如下所示
<%= form_form(@homework) do |f| %>
<%= f.fields_for :attachments do |ff| %>
<%= ff.label :attachment %>
<%= ff.file_field :attachment %>
<% end %>
<%= f.text_area :content %>
<%= f.submit "commit" %>
<% end %>
controller 的方法如下
class TasksController
def show
@task = Task.find(param[:id])
@homework = Homework.new
@homework.attachments.build
end
end
页面的显示是没有问题的。一个 file_upload 的 input,一个 homework 的 content field。但是在填写好表单提交的时候报错说的意思大概是
attachmentable can not be blank
似乎意思是说 attachment 里面的 attachmentable_id attachmentable_type 有问题,怎么破?