ユーザーがマイクロポストを投稿できるようにするマイクロポストフォームがあります。ここで、投稿するマイクロポストを表す写真/写真をアップロードできるようにしたいと思います。
フォームは次のとおりです。
= 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 テーブルから参照されます。
これを最初から最後まで考えてきたかどうかはわかりませんが、可能であれば、助け、アイデア、または解決策を知りたいです。
マイクロポスト用の新しい画像アップロード リソースを作成するよりも、既存の画像アップロード リソースを使用する方がよいと考えました。
前もって感謝します
敬具