厄介な問題があります。メンバー モデルを持つ単純なソーシャル ネットワークを構築しています。認証にはDevise、承認にはCanCanを使用しています。Member モデルと 1 対 1 の関係を持つ Avatar モデルも作成しました。Carrierwave を使用してアバターをアップロードします。すべてが機能し、プロファイルの編集が成功した後、プロファイル ショーまたはインデックス ビュー (views/members フォルダ内) にアクセスすると、アップロードされたアバターが表示されます。しかし、プロファイル編集ページに再度アクセスすると、意図的に削除したり、編集フォームを保存したりせずに、そのページが消えます (アップロード フォルダからも削除されます)。
すべてのデバイス ビューをインポートして、それらをカスタマイズできるようにしました。
私はメンバー プロフィール編集ビューとして views/members/registrations/edit.html.erb を使用しており、その中に次のフォームがあります。
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %>
<%= devise_error_messages! %>
<div class="invisible">
<%= resource.build_avatar %>
</div>
<div id="avatar">
<figure id="avatar_pic">
<% if @member.avatar.nil? %>
<img src="/assets/profile_pic.gif" alt="<%= @member.name %>">
<% else %>
<%= image_tag(@member.avatar.avatar_url, :alt => "#{@member.name}") %>
<% end %>
<%= f.fields_for :avatar do |avatar| %>
<%= avatar.file_field :avatar %>
<% end %>
</figure>
<div id="user_data">
<%= f.text_field :name, :autofocus => true %>
<p><%= f.text_field :age, :placeholder => "Életkor" %></p>
<p><%= f.text_field :city, :placeholder => "Település" %></p>
<p><%= f.text_field :job, :placeholder => "Foglalkozás" %></p>
</div>
</div>
<div id="user_status">
<div id="kms">
<p id="finish_date">2013. október 31.</p>
<%= f.text_field :kms %> <br>
<%= f.text_field :amount %>
<%= f.password_field :current_password, :placeholder => "Mentéshez adja meg jelszavát!" %>
</div>
<%= f.submit "Save" %>
</div>
<% end %>
いくつかカスタマイズする必要があるため、Devise RegistrationsController もインポートしました。たとえば、jCrop を実装します。現在は次のようになっています。
class Members::RegistrationsController < Devise::RegistrationsController
before_filter :check_permissions, :only => [:update]
skip_before_filter :require_no_authentication
def check_permissions
authorize! :update, resource
end
def create
super
end
def update
super
end
end
私の Member モデルは次のようになります (私は has_one :avatar の後に依存性を破壊していましたが、問題の原因をテストするためにそれを削除しましたが、そうではないようです):
class Member < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_permalink :name
has_one :avatar
accepts_nested_attributes_for :avatar
attr_accessible :name, :email, :password, :password_confirmation, :remember_me, :kms, :amount, :age, :job, :city, :why, :permalink, :avatar_attributes
validates_uniqueness_of :email
end
アバターが以前にアップロードされたときにメンバー編集ページにアクセスしたときのメッセージ:
ActionController::RoutingError (No route matches [GET] "/assets"):
actionpack (3.2.13) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
railties (3.2.13) lib/rails/rack/logger.rb:32:in `call_app'
railties (3.2.13) lib/rails/rack/logger.rb:16:in `block in call'
activesupport (3.2.13) lib/active_support/tagged_logging.rb:22:in `tagged'
railties (3.2.13) lib/rails/rack/logger.rb:16:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/request_id.rb:22:in `call'
rack (1.4.5) lib/rack/methodoverride.rb:21:in `call'
rack (1.4.5) lib/rack/runtime.rb:17:in `call'
activesupport (3.2.13) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.4.5) lib/rack/lock.rb:15:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/static.rb:63:in `call'
railties (3.2.13) lib/rails/engine.rb:479:in `call'
railties (3.2.13) lib/rails/application.rb:223:in `call'
rack (1.4.5) lib/rack/content_length.rb:14:in `call'
railties (3.2.13) lib/rails/rack/log_tailer.rb:17:in `call'
rack (1.4.5) lib/rack/handler/webrick.rb:59:in `service'
/usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service'
/usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run'
/usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread'
Rendered /usr/local/rvm/gems/ruby-2.0.0-p0/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.9ms)
メンバー編集ページにアクセスしたときに、Rails が (db およびサーバーから) Avatar を削除する理由は何ですか?
よろしくお願いします、マット