【问题标题】:How do I get the data for a selected file from one form to another form in ruby on rails?如何在 ruby​​ on rails 中将选定文件的数据从一种形式获取到另一种形式?
【发布时间】:2012-05-09 19:27:34
【问题描述】:

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

这是表格:

   = 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 表中引用,如果这有意义的话。

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

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

提前致谢

亲切的问候

【问题讨论】:

  • MicropostAlbum 和 PhotoAlbum 是同一个东西吗?有很多词,但我认为您想要一个照片上传器来显示您的各种类型的专辑,无论是 PhotoAlbum 还是 MicropostAlbum 或 RecordCoverAlbum ... 或 ....?如果没有,也许您需要将您所说的内容改写成一个简单的句子或陈述。
  • microposts album 是存储在 photo_albums 表的album_title 列中的相册之一的名称。我需要这样做,以便在任何时候通过微博上传照片时,它的图像都会存储在微博相册中(photo_albums 表中专辑标题列的属性)。这有意义吗?试图尽可能地解释。告诉我谢谢

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


【解决方案1】:

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

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

【讨论】:

  • 是的,微博基本上是状态更新/发布。我开始认为更简单的方法是为微帖子模型创建一个单独的载波上传器。我对我将如何做到这一点有一个更好的想法,但需要发布另一个问题,因为可能会面临一个挑战。谢谢你。
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
相关资源
最近更新 更多