我有一个微博表格,可以让用户发布微博。现在,我想让他们上传照片/照片来代表他们发布的微博。
以下是表单:
= form_for @micropost, :remote => true do |f|
= f.file_field :image # Needed for image previewing with html5 file api
= f.hidden_field :user_id
= f.text_area :content
= f.submit "Post"
我已经设置了用于创建相册和上传照片的数据库表格。
我有照片模型:
class Photo < ActiveRecord::Base
belongs_to :photo_album
attr_accessible :photo_album_id, :photo_title, :image, :remote_image_url
mount_uploader :image, ImageUploader
alpha_num_non_word_char = /^[a-zA-Z0-9\D_ -]*$/
validates :image, :presence => true
validates :photo_title, :presence => true,
:length => { :minimum => 2, :maximum => 50 },
:format => {
:with => alpha_num_non_word_char,
:message => "error"
}
validate :picture_size_validation, :if => "image?"
def picture_size_validation
errors[:image] << "Your photo should be less than 1MB" if image.size > 1.megabytes
end
end
和照片模型:
class PhotoAlbum < ActiveRecord::Base
belongs_to :user
has_many :photos
belongs_to :photo
attr_accessible :album_title, :user_id, :photo_id
alpha_num_non_word_char = /^[a-zA-Z0-9\D_ -]*$/
validates :album_title, :presence => true,
:length => { :minimum => 2, :maximum => 50 },
:format => {
:with => alpha_num_non_word_char,
:message => "error"
}
end
在用户注册后,会为他们创建一个“微博专辑”,这将保存他们为微博上传的所有照片。
我可以像这样轻松访问微博专辑:
@photo = Photo.new(:photo_album_id => PhotoAlbum.where(:user_id => current_user.id, :album_title => "microposts album").first.id)
最后,这是将照片上传到相册的表单:
= form_for @photo, :html => {:multipart => true} do |f|
= f.hidden_field :photo_album_id
= f.label :photo_title
= f.text_field :photo_title
= f.file_field :image
= f.submit
我想要解决方案/帮助:
现在,当用户通过微博表单选择照片后,我使用html5文件阅读器api来读取用户选择的本地图像,然后将其显示在页面下的页面上。这很好但我接下来要发生的是将所选图像上传并添加到“微博专辑”中。然后我想用微博的内容显示它。
我像这样访问我的内容@ microposts.each do | m | ..... m.content所以我可以像m.image一样访问图像。有些我需要将刚存储在“microposts album”专辑中的图像路径放到microposts表的image列中,以便我可以使用image_tag帮助器显示它。
总而言之,我希望用户从微博表单中选择的照片上传到“微博专辑”,这意味着照片细节会上传到照片表,如果有意义的话,可以从photo_albums表中引用。
我不确定我是否已经把这个想到了,但如果可能的话,我想得到一些帮助,想法或解决方案。
我只是认为最好使用我现有的图片上传资源,而不是为微博创建一个新资源。
提前致谢
亲切的问候
答案 0 :(得分:1)
将这一点拼凑在一起,从Paperclip的角度来看,为什么不用回形针处理所有图像上传的“微博”无论如何。这就像是一张带有图像的推文吗?或Facebook状态更新?
此外,如果这不起作用,我只是在用户的PhotoAlbum中创建一张照片,并在Micropost模型中保存Id或路径等,这样你就可以做image_tag User.first.microposts.last.image_path
这样的伪代码,但你明白了。如果一个人有多个图像要保存,那么你就可以进行图像上传器角度了。