在我的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>
造成这种情况的原因是什么?如何使其发挥作用?
答案 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