2017-07-20 6 views
-1

私はいくつかの質問(主に14880100 & 2308103)を受け取り、複数の画像をRailsモデルにアップロードする方法を見つけられませんでした。ここで複数の画像をアップロードする際の問題PaperClip、Nested Form Rails 5

私のコードです:

0 routes.rbを

photo.rb

class Photo < ApplicationRecord 
attr_accessor :location_id, :name, :picture 
belongs_to :location 
has_attached_file :picture, 
       styles: { large: "", medium: "300x300#", thumb: "100x100#" }, 
       storage: :s3, 
       :s3_protocol => :https, 
       url: ":s3_domain_url", 
       default_url: "placeholder.jpg", 
       path: "/:class/:attachment/:id_partition/:style/:filename", 
       s3_region: ENV["S3_REGION"], 
       s3_credentials: Proc.new { |a| a.instance.s3_credentials } 




def s3_credentials 
{ 
    bucket: ENV['S3_BUCKET_NAME'], 
    access_key_id: ENV['S3_ACCESS_KEY_ID'], 
    secret_access_key: ENV['S3_SECRET_ACCESS_KEY'], 
} 
end 
end 

location.rb

class Location < ApplicationRecord 
    geocoded_by :address 
    after_validation :geocode 
    acts_as_votable 
    extend FriendlyId 
    friendly_id :title, use: :slugged 
    has_many :photos 
    accepts_nested_attributes_for :photos, :allow_destroy => true 
    belongs_to :user 
    has_many :comments, dependent: :destroy 


end 

私は「

/views/locations._form.html.erb

<div class="form-group"> 
<div class="col-md-5"> 
    <%= nested_form_for @location, :html => { :multipart => true } do |f| %> 
    <%# all your building fields .... %> 

    <%= f.fields_for :photos do |photo| %> 
    <% if photo.object.new_record? %> 
     <%= photo.file_field(:picture) %> 
    <% else %> 
     <%= image_tag(photo.url(:thumb)) %> 
     <%= photo.hidden_field :_destroy %> 
     <%= photo.link_to_remove "X" %> 
    <% end %> 
    <% end %> 

    <p><%= f.link_to_add "Add photo", :photos %></p> 

<% end %></div> 

/views/locations.show.html.erb

<%= image_tag @location.photos.picture.url %> 

エラー受信しているのは "未定義のメソッド"ピクチャ ""です。

ヒントをいただければ幸いです。

+0

あなたがアクティブな関係オブジェクトの配列を受け取ります写真 'コレクション'であなただけI – uzaif

答えて

1

コード@location.photosは配列を返します、あなたはそれを反復しなければならない、ここではコードです:

<% @location.photos.each do |photo| %> 
    <%= image_tag(photo.picture.url)%> 
<% end %> 
+0

写真を反復処理しているが、このコードを使用しようとし、次のエラーを受け取りました: 'SQLite3 :: SQLException:列はありませんphotos.location_id:SELECT "photos"。* FROM "photos" WHERE "photos"。 "location_id" =? - 私は自分のスキーマをチェックし、画像は文字列として追加されました。 –

+0

@ pjh_1222つまり、 'photos'テーブルに' location_id'カラムがないことを意味します。エラーを解決するには、追加する必要があります。 – Pavan

+0

@ pjh_1222 location_idは、場所と写真の表の間のデフォルトの外部キーです。私はペーパークリップの文書を読んだだけで、次のように画像を表示できます:<%= image_tag(photo.picture(:medium))%> – xiaocui

関連する問題