嵌套模型和表单的未知属性_id

时间:2012-07-08 12:37:35

标签: ruby-on-rails

我想要什么: 我可以上传文件并将其分配给对象(例如Person)的网站。 对于上传,我使用的是carrierwave。我想要两个分开的模型:“人物”和“附件”。每个人只有一个附件。 在我看来,我想将上传设置为嵌套形式,使用'field_for'。

我的代码

#app/models/person.rb
has_one :attachment
accepts_nested_attributes_for :attachment
attr_accessible :name, :attachment_attributes

#app/models/attachment.rb
attr_accessible :description, :file
belongs_to :person
mount_uploader :file, AttachmentUploader

#app/controllers/person_controller.rb
def new
  @person = Person.new
  @person.build_attachment
end

#app/views/person/new.html.haml
= form_for @person, :html => {:multipart => true} do |f|
  = f.fields_for :attachment do |attachment_form|
    attachment_form.file_field :file
  = f.submit

我的问题: 当我尝试打开new.html时,我收到此错误: 未知属性:person_id

我不知道为什么会出现这种错误。 有人有点想法吗?

(我使用rails 3.2.6 with ruby​​ 1.8.7)

2 个答案:

答案 0 :(得分:2)

在两个模型之间创建关联时,总会有两个步骤。

1。)创建所需的cholumns / table。

当你有一个1..n或1..1关系时,需要在其中一个表中有一个关联列。此列不是自动创建的。你需要创建它们。为此,fiorst创建了一个迁移:

rails g migration addColumnToTable

这将在db/migrate/中创建您需要编辑的迁移文件。在up方法中添加add_colun命令以添加列

add_column :tablename, :column_name, :column_type

您可以在此处找到完整的文档:http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

然后,您需要通过执行rake db:migrate

来运行迁移

2。)将关联添加到模型中(这是您已经完成的工作!)

那应该为你做,...

答案 1 :(得分:0)

只需将person_id列添加到附件表即可。这就是外键轨道正在寻找。