ユーザーが自分のアプリケーションで何かを編集すると、変更していなくてもペーパークリップでイメージを再アップロードすることが強制されます。そうしないと、validate_presence_of:imageというエラーが発生します。これはかなり迷惑です。ペーパークリップ:編集を続ける
編集で新しい画像を入力しないと、Paperclipはその属性を更新しないようにするにはどうすればよいですか?
フォトコントローラは、Railsのスキャフォールドジェネレータから新しくなっています。残りのソースコードは以下のとおりです。
モデル/ accommodation.rb
class Accommodation < ActiveRecord::Base
attr_accessible :photo
validates_presence_of :photo
has_one :photo
has_many :notifications
belongs_to :user
accepts_nested_attributes_for :photo, :allow_destroy => true
end
コントローラ/ accommodation_controller.rb
class AccommodationsController < ApplicationController
def index
@accommodations = Accommodation.all
end
def show
@accommodation = Accommodation.find(params[:id])
rescue ActiveRecord::RecordNotFound
flash[:error] = "Accommodation not found."
redirect_to :home
end
def new
@accommodation = current_user.accommodations.build
@accommodation.build_photo
end
def create
@accommodation = current_user.accommodations.build(params[:accommodation])
if @accommodation.save
flash[:notice] = "Successfully created your accommodation."
redirect_to @accommodation
else
@accommodation.build_photo
render :new
end
end
def edit
@accommodation = Accommodation.find(params[:id])
@accommodation.build_photo
rescue ActiveRecord::RecordNotFound
flash[:error] = "Accommodation not found."
redirect_to :home
end
def update
@accommodation = Accommodation.find(params[:id])
if @accommodation.update_attributes(params[:accommodation])
flash[:notice] = "Successfully updated accommodation."
redirect_to @accommodation
else
@accommodation.build_photo
render :edit
end
end
def destroy
@accommodation = Accommodation.find(params[:id])
@accommodation.destroy
flash[:notice] = "Successfully destroyed accommodation."
redirect_to :inkeep
end
end
モデル/ photo.rb
class Photo < ActiveRecord::Base
attr_accessible :image, :primary
belongs_to :accommodation
has_attached_file :image,
:styles => {
:thumb=> "100x100#",
:small => "150x150>" }
end
"...私のアプリケーションで何かを編集しています..."はかなり曖昧です。おそらく編集/更新アクションのコードとペーパークリップを添付するモデルを補完できますか? – DanneManne
投稿を更新してコードを追加します。私は、関連するモデルのレコードを編集することを意味していました。 –