0

我想要的:一个我可以上传文件并将其分配给对象(例如人)的站点。对于上传,我使用的是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

我不知道为什么会发生此错误。有人出主意吗?

(我正在使用带有 ruby​​ 1.8.7 的 rails 3.2.6)

4

2 回答 2

2

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

1.) 创建所需的 cholumns / 表。

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

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.)将关联添加到模型(这是您已经完成的!)

那应该为你做,...

于 2012-07-11T13:53:18.023 回答
0

只需将 person_id 列添加到您的附件表中。那就是rails正在寻找的外键。

于 2012-07-11T13:57:45.557 回答