我對Rails很新,所以很可能這裏有一個簡單的概念,我只是沒有得到,但這裏是發生了什麼。當我調用構建時,Rails嵌套屬性被刪除
我有一個用戶模型(由Devise支持),每個用戶都有自己的照片屬性。我知道我可以將這張照片作爲用戶的一部分,但照片實際上是該網站的核心內容,所以我更喜歡他們是他們自己的桌子。照片模型有一個處理實際照片文件的回形針附件。
這裏的問題:一切都是按照我上傳照片的用戶計劃的工作,但由於某些原因,當我返回到照片上傳頁面,我剛剛上傳照片被刪除。我跟蹤它到這行代碼:
@photo = @ user.build_photo
如果我不叫,對於上傳的形式拋出一個零類錯誤,因爲@ user.photo不存在,但是當我打電話給它時,它會刪除先前上傳的照片,這很奇怪,因爲據我所知,它是創建函數來改變數據庫,而不是構建。
這裏是服務器的顯示:
開始GET 「/設置」 127.0.0.1在2012-03-08 10點19分21秒-0800 處理由SettingsController#指數HTML用戶負載(選擇
users
。id
= 6極限1照片 負載(0.3ms)選擇photos
。*從photos
其中photos
。user_id
= 6限制1(0.2ms)開始[回形針]調度要刪除的附件。 SQL(0.6ms)DELETE FROMphotos
WHEREphotos
。id
= 20 [回形針]刪除附件。
這裏的一對夫婦我的模型和控制器:
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
天才,謝謝! – 2012-03-09 10:14:07