私は周りを見回しましたが、なぜこれが機能しているのかわかりません。最初にアバターをアップロードする必要なく、ユーザーがサインアップできるようにします。ただし、必要に応じて、サインアップ後にアバターをアップロードできます。ユーザーコントローラーではなく、「プロファイル」コントローラーでアバターを編集できるようにします。ただし、アバターは更新されません。私はユーザーのためにデバイスを使用しています。以下のコード
<%= form_for edit_user_path(current_user.id), :html => { :multipart => true } do |form| %>
<%= form.file_field :avatar %>
<%= form.submit "upload" %>
<% end %>
そして、Users コントローラーには、次のようなものがあります。
def edit
@user = User.find(params[:id])
@user.update_attribute(:avatar, params[:user][:avatar])
end
そしてユーザーモデルには、これがあります
has_attached_file :avatar, :styles => { :show => "150x150#" }, :default_url => 'missing_:style.png'
アバターは更新または保存されません。理由はわかりません。
新しいフォーム コードで更新します。
<%= form_for current_user, :url => {:action => 'update'}, :html => { :multipart => true } do |form| %>
<%= form.file_field :avatar %>
<%= form.submit "upload" %>
<% end %>
プロファイルコントローラーには、次のものがあります。
def update
@user = User.find(params[:id])
@user.update_attribute(:avatar, params[:user][:avatar])
end
次のエラーが表示されます: undefined method `name' for #
リクエストで渡されるパラメータは以下のとおりです
{"utf8"=>"✓",
"_method"=>"put",
"authenticity_token"=>"cxANtlyj+W+ykSnivfQTfTznkpt7yXe75E8jWI1IC+o=",
"user"=>{"avatar"=>#<ActionDispatch::Http::UploadedFile:0x000001032ac7c8 @original_filename="pictester.png",
@content_type="image/png",
@headers="Content-Disposition: form-data; name=\"user[avatar]\"; filename=\"pictester.png\"\r\nContent-Type: image/png\r\n",
@tempfile=#<File:/var/folders/x9/gvnnn6s9585gkxw40c51d3540000gn/T/RackMultipart20130622- 10366-a8ome3>>},
"commit"=>"upload",
"id"=>"1"}