我想要什么: 我可以上传文件并将其分配给对象(例如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)
答案 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列添加到附件表即可。这就是外键轨道正在寻找。