2016-12-06 9 views
0

ネストしたテーブルに画像を保存/表示しようとするとエラーが発生します。 1つのブログに属する複数の写真を保存したいので、入れ子にした設定です。PaperClipを介したネストされたイメージのNoMethodError

SOに関する同様の質問に対するいくつかの回答が私を解決に導いてくれませんでした。

エラー:/home/ubuntu/workspace/MyDashboard/app/views/blogs/show.html.erbを表示ブログ#ショー で

NoMethodErrorライン#11が提起: 未定義のメソッド `写真'のために#

私は画像がまったく保存されていないと思います。

Blog.rb:

class Blog < ApplicationRecord 

    validates_presence_of :date, :story 

    has_many :blog_images, :dependent => :destroy 
    accepts_nested_attributes_for :blog_images, reject_if: :all_blank, allow_destroy: true 
end 

Blog_Image.rb

class BlogImage < ApplicationRecord 

    belongs_to :blog 

    has_attached_file :photo, :styles => { :small => "150x150>", :large => "320x240>" } 
    validates_attachment_content_type :photo, :content_type => /\Aimage\/.*\z/ 

end 

Routes.db:

resources :blogs do 
    resources :blog_images 
    end 

コントローラ:

def new 
    @blog = Blog.new 
    @blog.blog_images.build 
    end 

    def create 
    @blog = Blog.new(blog_params) 

    if @blog.save 
     redirect_to blogs_path 
    else 
     render 'new' 
    end 
    end 
(...) 

    private 

    def blog_params 
     params.require(:blog).permit(:story, :date, 
          blog_images_attributes: [:id, :blog_id, :photo]) 
    end 

入力フォーム:

<%= form_for(@blog, :html => {:multipart => true}) do |f| %> 

    <div class="field"> 
    <%= f.label :date %> 
    <%= f.date_field :date %> 
    </div> 

    <div class="field"> 
    <%= f.label :story %> 
    <%= f.text_area :story %> 
    </div> 

    <%=f.fields_for :blog_images do |i| %> 
    <%= i.file_field :photo %> 
    <% end %> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 

<% end %> 

ビュー:

<p> 
    <%= image_tag @blog.blog_images.photo.url(:small) %> 
    </p> 

フォームが保存されているが、私はそれを表示したいとき、私は上記の取得エラー。私はあなたの助けに感謝します!

答えて

0
@blog.blog_images 

は、画像のコレクションです。 has_many :blog_imagesclass Blog

このコレクションのすべての要素が知っているにもかかわらず、コレクションは方法photoを認識しません。 ['USA', 'UK', 'Germany']の首都は何ですか?あなたは

<% @blog.blog_images.each do |blog_image| %> 
<p> 
    <%= image_tag blog_image.photo.url(:small) %> 
    </p> 
<% end %> 
+0

を反復処理する必要がある

はエリックありがとう、これは確かにビューファイルのための私のエラーを解決しました。今私は次のものに取り組んでいます(私はすでに予想しています)。フォームがレンダリングされると、全く新しい写真が追加されていません。ネストされた属性を持つフォームには、表示できる限りエラーが含まれていますか? 写真用のネストしたテーブルを使わずにpaperclip-modelをテストし、簡単に動作させました。 – nannev

関連する問題