1

これが私のコードです:

モデル:

class Article < ActiveRecord::Base
  attr_accessible :title, :author, :content, :imageable_attributes

  has_one :image, as: :imageable, dependent: :destroy
  accepts_nested_attributes_for :image, allow_destroy: true

  validates_presence_of :title, :content, :author
end

class Image < ActiveRecord::Base
  mount_uploader :image, ImageUploader
  attr_accessible :image, :caption, :imageable_id, :imageable_type, :article_ref

  validates_presence_of :image
  belongs_to :imageable, :polymorphic => true
end

コンソールで試したことは次のとおりです。

article = Article.create!(title: "test", content: "test", author: "test", image_attributes: {image: "test.jpg", caption: "test caption"})

これにより、エラーのない記事が作成されますが、次のように呼び出すと:

article.image

私は得る:

=> nil

コンソールに入力すると:

article = Article.new(title: "test", content: "test", author: "test")
article.build_image(image: "test.jpg")

私は得る:

=> Validation failed: Image image can't be blank

どんな助けでも大歓迎です、私は非常に混乱しています!

4

1 に答える 1

1

パスだけでなく、アタッチメント自体を提供する必要があると思います。例として、

i = Image.new(
  :image => File.join(Rails.root, "test.jpg")
)
i.image

# => 

しかし

i = Image.new(
  :image => File.open(File.join(Rails.root, "test.jpg"))
)
i.image

# => /uploads/tmp/20120427-2155-1316-5181/test.jpg

File.openただし、Multipart POST を使用して保存する場合は使用する必要はありません。

于 2012-04-27T21:01:48.503 に答える