ArtworksのリソースにArtworks
使用しているモデルのフォームがプロジェクトにあります。fields_for
Photo
has_many :photos
Photo
モデルはペーパークリップを使用して画像を添付します。
私のフォームはすべてAJAXベースです。つまり、ページをリロードしてはならずredirect_to
、コントローラーのどこでも使用してはいけません(私はそうではありません)。
フォームにペーパークリップfile_fieldを含めたときにfields_for
、フォームを送信するときに写真を作成または更新すると、次のエラーが発生します。
Template is missing
Missing template artworks/show, application/show with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in: * "/home/david/rails/piml_artwork/app/views" * "/home/david/.rvm/gems/ruby-1.9.3-p194/gems/devise-2.1.2/app/views"
画像を破棄するチェックボックスは期待どおりに機能します。フォームの残りの詳細を更新して送信すると、AJAX応答を返し、ページに入力するだけで、期待どおりに機能します。
私のアートワークコントローラーは次のとおりです。
class ArtworksController < ApplicationController
before_filter :load
authorize_resource
respond_to :html, :json, :js
def load
end
def show
@artwork = Artwork.find(params[:id])
end
def index
@artworks = Artwork.all
end
def new
@artwork = Artwork.new
@artwork.photos.build unless @artwork.photos.count > 0
end
def create
@artwork = Artwork.new(params[:artwork])
if @artwork.save
flash[:notice] = "Artwork saved"
@artworks = Artwork.all
respond_with @artwork
end
end
def edit
@artwork = Artwork.find(params[:id])
@artwork.photos.build unless @artwork.photos.count > 0
end
def update
@artwork = Artwork.find(params[:id])
if @artwork.update_attributes(params[:artwork])
flash[:notice] = "Artwork updated"
@artworks = Artwork.all
respond_with @artwork
end
end
def destroy
@artwork = Artwork.find(params[:id])
@artwork.destroy
flash[:notice] = "Artwork destroyed"
@artworks = Artwork.all
end
end
争いを引き起こしている形はこれです:
<%= form_for( @artwork, remote: true, mutlipart: true ) do |f| %>
<%= render 'layouts/error_messages', object: f.object %>
<div id="artwork-title">TITLE: <%= f.text_field :title %></div>
<div id="artwork-title-underline"></div>
<div id="artwork-show-picture"><%= image_tag @artwork.photos.first.photo.url(:medium) unless @artwork.photos.first.new_record? %>
<div id="artwork-picture-upload">
<%= f.fields_for :photos, remote: true, multipart: true do |p| %>
<% if p.object.new_record? %>
UPLOAD PHOTO
<%= p.file_field :photo, value: 'Upload Image' %>
<% else %>
REPLACE PHOTO
<%= p.file_field :photo, value: 'Replace Image' %>
<br />
<br />
<%= p.check_box :_destroy %>
<%= p.label :_destroy, 'Delete Image' %>
<% end %>
<% end %>
</div>
</div>
<div id="artwork-public">
ARTIST<br />
<%= f.select :artist_id, Artist.select_list, include_blank: "SELECT ARTIST" %><br />
<br />
DATE OF WORK <br />
<%= f.text_field :date_of_work %><br />
<br />
<div id="artwork-modify-buttons">
<%= f.submit %>
</div>
<% end %>
更新用のJSファイルは次のとおりです。
<% if !@artwork.errors.any? %>
$("#facebox .content").html("<%= escape_javascript(render(partial: "/artworks/show")) %>");
$("#artworks-col").html(" <%= escape_javascript(render(partial: "/admin/artworks_list" )) %>")
<% else %>
$("#facebox .content").html("<%= escape_javascript(render(partial: "/artworks/form")) %>");
<% end %>