1

has_one アソシエーション モデルで accept_nested_attributes_for を使用しています。

ユーザーとプロファイルの 2 つのモデルがあります。ユーザーには 1 つのプロファイルがあります。

class User < ActiveRecord::Base
  attr_accessible :name, :email,:profile_attributes
  has_one :profile
  accepts_nested_attributes_for :profile
end

class Profile < ActiveRecord::Base
  attr_accessible :avatar
  belongs_to :user
  mount_uploader :avatar, AvatarUploader
end

ユーザー編集ページに 2 つのフォームがあります。1 つは主要なユーザー属性を更新し (正常に動作し、以下には示されていません)、次にユーザーがアバターをアップロードできるようにするものです。

<%= form_for @user, :html => {id: 'avatar_form' ,:multipart => true } do |f| %>
  <%= f.fields_for :profile do |builder| %>
  <%= builder.file_field :avatar %>
  <% end %>
  <%= f.submit %>
<% end %>

この送信は機能しません。次のエラー メッセージが表示されます。

UsersController#update の NoMethodError

nil:NilClass の未定義のメソッド `name'

更新用の私の UsersController コードは次のとおりです。

def update
  @user = current_user
  if @user.update_attributes(params[:user])
    redirect_to home_path
  else
    render 'edit'
  end
end

パラメータは次のとおりです。

{"utf8"=>"✓",
"_method"=>"put",
"authenticity_token"=>"YTpGnj9uIpybDAgf4c6pxMydY15ga5GZ++FBMe/6dV4=",
"user"=>{"profile_attributes"=>{"avatar"=>#<ActionDispatch::Http::UploadedFile:0x2303e08 @original_filename="test.jpg",
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"user[profile_attributes][avatar]\";  filename=\"test.jpg\"\r\nContent-Type: image/jpeg\r\n",
"id"=>"3"}},
"commit"=>"Upload",
"id"=>"1"}

どんな助けでも大歓迎です。ありがとう!!

4

2 に答える 2