0

欲しいもの: ファイルをアップロードしてオブジェクト (Person など) に割り当てることができるサイト。アップロードには、carrierwaveを使用しています。「人」と「愛着」の 2 つのモデルを分離したいと考えています。人には、たったひとつの執着しかありません。私の見解では、「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

2 つのモデル間の関連付けを作成する場合、常に 2 つの手順があります。

1.) 必要な列/テーブルの作成。

1..n または 1..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 列を追加するだけです。それがレールが探している外部キーです。

于 2012-07-11T13:57:45.557 に答える