如何在轨道上的ruby中将所选文件的数据从一个表单获取到另一个表单?

时间:2012-05-09 19:27:34

标签: ruby-on-rails ruby-on-rails-3 rubygems carrierwave ruby-on-rails-3.2

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

以下是表单:

   = 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表中引用。

我不确定我是否已经把这个想到了,但如果可能的话,我想得到一些帮助,想法或解决方案。

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

提前致谢

亲切的问候

1 个答案:

答案 0 :(得分:1)

将这一点拼凑在一起,从Paperclip的角度来看,为什么不用回形针处理所有图像上传的“微博”无论如何。这就像是一张带有图像的推文吗?或Facebook状态更新?

此外,如果这不起作用,我只是在用户的PhotoAlbum中创建一张照片,并在Micropost模型中保存Id或路径等,这样你就可以做image_tag User.first.microposts.last.image_path这样的伪代码,但你明白了。如果一个人有多个图像要保存,那么你就可以进行图像上传器角度了。