1

私は周りを見回しましたが、なぜこれが機能しているのかわかりません。最初にアバターをアップロードする必要なく、ユーザーがサインアップできるようにします。ただし、必要に応じて、サインアップ後にアバターをアップロードできます。ユーザーコントローラーではなく、「プロファイル」コントローラーでアバターを編集できるようにします。ただし、アバターは更新されません。私はユーザーのためにデバイスを使用しています。以下のコード

<%= 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"}
4

1 に答える 1

3

属性の更新はdef updateではなく内で行われますdef edit。これは、フォームをレンダリングするためのものです。

profiles_controller.rb

def update
    @user = User.find(params[:id])
    @user.update_attribute(:avatar, params[:user][:avatar])
end

動作するはずです。

于 2013-06-22T14:25:21.473 に答える