0

我有一个微博表单,可以让用户发布微博。现在我想让他们能够上传照片/照片来代表他们将发布的微博。

这是表格:

   = 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 相册”相册中的图像路径放入 microposts 表的图像列中,以便可以使用 image_tag 帮助器显示它。

总而言之,我希望用户从微博表单中选择的照片上传到“微博相册”,这意味着照片详细信息将上传到照片表并从 photo_albums 表中引用,如果这有意义的话。

我不确定我是否从头到尾考虑过这一点,但如果可能的话,我想获得一些帮助、想法或解决方案。

我只是觉得最好使用我现有的图片上传资源,而不是为微博创建一个新资源。

提前致谢

亲切的问候

4

1 回答 1

1

将这些拼凑在一起,并从回形针的角度讲,为什么不让回形针在“微帖子”中处理所有图像上传,无论那是什么。这就像一条带有图像的推文吗?还是脸书状态更新?

另外,如果这不起作用,我只需在用户的 PhotoAlbum 中创建一张照片,然后将 ID 或路径或其他内容保存在 Micropost 模型中,这样你就可以执行类似image_tag User.first.microposts.last.image_path伪代码的操作,但你明白了。如果一个人有多个图像要保存,那么您可以从图像上传角度进行操作。

于 2012-05-09T23:45:08.560 回答