2010-12-26 12 views
0

私のレールアプリケーションには2つのモデル、ギャラリー、写真があります。ギャラリーには多くの写真と写真が1つのギャラリーに所属しています。レールは関連する関連付けをロードせずにモデルを見つける

写真を削除すると、レールにもギャラリーがロードされていることがわかりました。これは必要ありません。追加されたデータベースクエリです。

削除する写真がfindの場合、@photo = Photo.find(params[:id])を使用します。これにより、関連付けがロードされます。

@photo = Photo.find(params[:id], :include => :gallery)があり、ギャラリーを読み込むように指示しています。これとは逆のことは何ですか?私は、次のことを試してみました:

@photo = Photo.find(params[:id], :include => []) 
@photo = Photo.find(params[:id], :include => nil) 

私も写真を削除するために、私は必要なフィールドだけを選択しようとしましたが、ファイルのパスが基づいているので、私は実際のファイルを削除するために、gallery_idを必要としますギャラリーから外す。これでギャラリーがロードされます。

編集: 私Photoモデルは次のようになります。

class Photo < ActiveRecord::Base 
    belongs_to :gallery 

    mount_uploader :file, PhotoUploader 
end 

mount_uploadercarrierwaveからです。私はそれに次のコードを持つアップローダーを持っています:

def store_dir_base 
    "galleries/#{model.gallery.id}/" 
end 

それは犯人かもしれませんか?

ありがとうございます!

+0

これは私が見るのと同じ動作ではありません。おそらくあなたのモデルにアソシエーションを強制的にロードする何かがありますか? – zetetic

+0

zeteticに何が追加されているか。あなたはあなたが投稿しているものより多くのコードを逃していないと確信していますか?あなたはgallery_idにファイルを削除する必要があると言いますが、ギャラリーをロードしたくないのはなぜですか?あなたのルートの一部ですか? – pjammer

+0

上記の私の更新を参照してください - ありがとう – zsalzbank

答えて

0

この理由は、私が搬送波に使用していたuploaderコードのためです。

このコードは、私がアクセスするために必要なすべてのIDたギャラリーモデルを、アクセスしていた:

def store_dir_base 
    "galleries/#{model.gallery.id}/" 
end 

私がしなければならなかったすべては、それを変更しました:これはので、それを作った

def store_dir_base 
    "galleries/#{model.gallery_id}/" 
end 

galleryモデルの代わりにphotoモデル列gallery_idにアクセスしていました。

関連する問題