2011-01-05 13 views
4

ユーザーが自分のアプリケーションで何かを編集すると、変更していなくてもペーパークリップでイメージを再アップロードすることが強制されます。そうしないと、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 
+0

"...私のアプリケーションで何かを編集しています..."はかなり曖昧です。おそらく編集/更新アクションのコードとペーパークリップを添付するモデルを補完できますか? – DanneManne

+0

投稿を更新してコードを追加します。私は、関連するモデルのレコードを編集することを意味していました。 –

答えて

1

@accommodation.build_photoは、newアクション以外では必要ありません。

+0

甘い、ありがとう! –

+1

別の論理的な問題:'accepts_nested_attributes_for:photo、:allow_destroy => true '、写真が必要な場合でも破棄が許可されます。 – Heikki

関連する問題