Вложенная модель, update_attributes не работает

Мне трудно с тем, что я думал, будет примером обновления учебника. Искал SO, но не смог найти ответ. Короче говоря, когда я нажимаю «Отправить», user_id в модели профиля стирается, и никакие другие данные не сохраняются. Я использую Rails 3.2.2.

Вот что у меня есть...

Пользовательская модель...

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

Модель профиля...

class Profile < ActiveRecord::Base
  validates :first_name, :presence => true
  validates :last_name, :presence => true
  belongs_to :user
  attr_accessible :first_name, :last_name
end 

Контроллер пользователей...

class UsersController < ApplicationController

  def new
    @user = User.new
    @user.accounts_users.build()
    @user.build_profile()

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @user }
    end
  end

  def edit
    @user = User.find(params[:id])
  end

  def update
    @user = User.find(params[:id])
    respond_to do |format|
      if @user.update_attributes(params[:user])
        format.html { redirect_to @user, notice: 'Profile was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end    
end

Вложенная форма...

<%= form_for @user, :validate => true do |f| %>
  <%=  f.fields_for :profile do |p| %>
    <fieldset>
      <div class="field">
        <%= p.label :first_name %>
        <%= p.text_field :first_name %>
      </div>
      <div class="field">
        <%= p.label :last_name %>
        <%= p.text_field :last_name %>
      </div>
  <% end %>
      <div class="field">
        <%= f.label :email %>
        <%= f.text_field :email %>
      </div>
      <div class="actions">
        <%= f.submit 'Edit Profile', :class => "btn btn-large btn-success" %>
        <%= cancel %>
      </div>
    </fieldset>
<% end %>

Изменить: я отредактировал UsersController, чтобы включить новое действие. Почему новое действие повлияет на действия редактирования/обновления?


person hugo    schedule 29.06.2012    source источник
comment
Алекс... ты заставил меня задуматься, и я понял, что действия "создать/создать" тоже не работают. Я разместил здесь еще один вопрос, ссылка. Я вернусь к этому вопросу (и, надеюсь, отвечу на него), как только выясню это.   -  person hugo    schedule 29.06.2012


Ответы (1)


У меня была аналогичная проблема раньше. Можем ли мы увидеть код вашего действия new? У вас там есть @user.build_profile (прямо под @user = User.new)? Или действие new работает нормально?

person Alex Watt    schedule 29.06.2012