私はRailsの新機能ですから、ここではわかりませんが、ここでは起こっていることがあります。ビルドを呼び出すと、ネストされたRailsのネストされた属性が削除される
私はUserモデル(Deviseを搭載)を持っており、各ユーザーにはそれぞれの写真属性があります。私は写真をユーザーの一部として含めることができたことは知っていますが、写真は実際にはサイトの中核的な内容なので、私はそれらを自分のテーブルにすることを好みました。写真モデルには、実際の写真ファイルを扱うクリップクリップが付属しています。
問題は次のとおりです。写真をユーザーとしてアップロードするとすべてが計画どおりに機能しますが、何らかの理由で写真のアップロードページに戻ると、アップロードした写真が削除されます。私はので、@ user.photoアップロードするためのフォームがnilクラスのエラーをスローし、その呼び出していない場合は
@photo = @
user.build_photo:私はこのコード行にそれを突き止めました存在しませんが、私がそれを呼び出すと、私が知る限り、ビルドではなくデータベースを変更するcreate関数なので、以前にアップロードされた写真が削除されます。ここで
は、サーバーが示して何:
は(HTMLのユーザー負荷としてSettingsController#インデックスで2012-03-08 10時19分21秒-0800 処理で127.0.0.1のための "/設定を" GET開始しました0.3ms) SELECT
users
。* FROMusers
WHEREusers
。id
= 6リミット1写真 負荷(0.3ms)SELECTphotos
。* FROMphotos
WHEREphotos
。user_id
= 6 LIMIT 1(0.2ms)BEGIN [paperclip]添付ファイルの削除をスケジュールします。 SQL(0.6ms)から削除photos
WHEREphotos
。id
= 20 [paperclip]添付ファイルを削除しています。
そして、ここで私のモデルとコントローラのカップルです:
class SettingsController < ApplicationController
def index
@user = current_user
@photo = @user.build_photo
end
end
<h1>Settings Page</h2>
<%= image_tag @user.photo.the_photo.url(:medium) %>
<%= form_for [@user, @photo], :html => { :multipart => true } do |f| %>
<%= f.file_field :the_photo %>
<%= f.submit %>
<% end %>
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :name, :photo_attribute
has_one :photo, :dependent => :destroy
accepts_nested_attributes_for :photo
end
class PhotosController < ApplicationController
def create
@user = current_user
@photo = @user.create_photo(params[:photo])
redirect_to root_path
end
def update
@user = current_user
@photo = @user.photo
if @photo.update_attributes(params[:photo])
redirect_to settings_path
else
redirect_to settings_path
end
end
def destroy
end
end
天才、ありがとう! –