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 のような画像にアクセスできます。image_tagヘルパーを使用して表示できるように、「マイクロポストアルバム」アルバムに保存されたばかりの画像のパスをマイクロポストテーブルの画像列に取得する必要があります。

要約すると、ユーザーがマイクロポスト フォームから選択した写真を「マイクロポスト アルバム」にアップロードする必要があります。つまり、写真の詳細が photos テーブルにアップロードされ、それが意味をなす場合は photo_albums テーブルから参照されます。

これを最初から最後まで考えてきたかどうかはわかりませんが、可能であれば、助け、アイデア、または解決策を知りたいです。

マイクロポスト用の新しい画像アップロード リソースを作成するよりも、既存の画像アップロード リソースを使用する方がよいと考えました。

前もって感謝します

敬具

4

1 に答える 1

1

これをまとめて、ペーパークリップの観点から言えば、「マイクロポスト」ですべての画像アップロードをペーパークリップで処理しないのはなぜですか。画像入りツイートみたいなもんか?またはFacebookのステータス更新?

また、それがうまくいかない場合は、ユーザーの PhotoAlbum に写真を作成し、ID またはパスなどを Micropost モデルに保存するだけでよいので、image_tag User.first.microposts.last.image_pathこれは疑似コードですが、アイデアはわかります。男が保存する画像を複数持っている場合は、画像アップローダー アングルを実行します。

于 2012-05-09T23:45:08.560 に答える