ネストしたテーブルに画像を保存/表示しようとするとエラーが発生します。 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>
フォームが保存されているが、私はそれを表示したいとき、私は上記の取得エラー。私はあなたの助けに感謝します!
を反復処理する必要がある
はエリックありがとう、これは確かにビューファイルのための私のエラーを解決しました。今私は次のものに取り組んでいます(私はすでに予想しています)。フォームがレンダリングされると、全く新しい写真が追加されていません。ネストされた属性を持つフォームには、表示できる限りエラーが含まれていますか? 写真用のネストしたテーブルを使わずにpaperclip-modelをテストし、簡単に動作させました。 – nannev