使用Paperclip为每个型号提供多种不同的附件类型

时间:2015-11-12 21:57:52

标签: ruby-on-rails ruby paperclip

在我的Rails应用程序中,我有一个Post模型。帖子有三种不同的附件类型,图像,歌曲或视频。

以下是我模特中的内容:

class Post < ActiveRecord::Base

    has_attached_file :image, styles: {
    large: '900x900>'
  }

  has_attached_file :song
  has_attached_file :video

  # Validate the attached image is image/jpg, image/png, etc
  validates_attachment_content_type :image, :content_type => /\Aimage\/.*\Z/

  validates_attachment_content_type :song, :content_type => [ 'application/mp3','application/x-mp3', 'audio/mpeg', 'audio/x-mpeg', 'audio/mp3', 'audio/x-mp3', 'audio/mpeg3', 'audio/x-mpeg3', 'audio/mpg', 'audio/x-mpg', 'audio/x-mpegaudio' ],
            :message => 'Please select a .mp3 file'

  validates_attachment_content_type :video, :content_type => ['video/mp4'],
    :message => "Sorry, right now we only support MP4 video"

end

以下是我在控制器中的内容:

def create_new_post
    @post = Post.new
    @post.image = params[:image]
    @post.save
    redirect_to root_path
end

以下是我的帖子表格架构中的内容:

t.string   "image_file_name"
t.string   "image_content_type"
t.integer  "image_file_size"
t.datetime "image_updated_at"
t.string   "song_file_name"
t.string   "song_content_type"
t.integer  "song_file_size"
t.datetime "song_updated_at"
t.string   "video_file_name"
t.string   "video_content_type"
t.integer  "video_file_size"
t.datetime "video_updated_at"

我正在使用form_tag来创建帖子。并非所有附件都需要创建帖子。提交表单后,我收到此错误:

undefined method `song_content_type' for #<Post:0x007fa704a54b70>

造成这种情况的原因是什么?如何使其发挥作用?

1 个答案:

答案 0 :(得分:1)

要让validates_attachment_content_type :song工作,您需要在song_content_type模型(Post表)上定义posts属性。

您的schema.rb应包含以下内容:

create_table "posts" do |t|
  t.string   "song_file_name"
  t.string   "song_content_type"
  t.integer  "song_file_size"
  ...
end