如何在Rails中使用form_for仅更改模型中的一个属性

时间:2012-05-12 19:46:34

标签: ruby-on-rails ruby-on-rails-3 form-for

我想更改我的User模型的profile属性,它只是form_for中的一个字符串。我遇到了一个问题,当我更新我的个人资料属性时,我的密码被设置为空白。

也就是说,我的用户帐户有密码,但是当我更改个人资料时,我的密码变为空白。下次我尝试登录时,我只是将密码字段留空。

如何在不更改密码的情况下更改个人资料字段?

感谢。

以下是我的表单并更新操作。我正在传递一个名为updating_password的隐藏字段,它是一个布尔值,用于是否需要密码验证和确认。

edit_profile.html.erb

<%= form_for @user, :html => { :multipart => true } do |f| %>

  <%= f.label :profile %>
  <%= f.text_area :profile%>

  <%= f.hidden_field :updating_password, :value => "false" %>

  <%= submit_tag "update" %>

<% end %>

users_controller.rb

def update
  @user = User.find(params[:id])
  @user.updating_password = params[:user][:updating_password]

  #for updating profile only
  if(@user.updating_password == 'false')
    if @user.update_attribute('profile', params[:user][:profile])
      redirect_to @user
    else
      @title = "Edit user"
      render 'edit'
     end
   end

  #for updating everything else including password
  if(@user.updating_password == 'true')
    if @user.update_attributes(params[:user])
      redirect_to @user
    else
      @title = "Edit user"
      render 'edit'
    end
  end
end

我将从user.rb文件添加相关的updates_password代码段:

validates_presence_of :password, :if => :should_validate_password?
validates_confirmation_of :password, :if => :should_validate_password?

  def should_validate_password?
    updating_password || new_record?
  end

0 个答案:

没有答案