Ruby on Rails更新当前用户

foo*_*dev 0 ruby ruby-on-rails ruby-on-rails-4

如何更新当前用户信息,我已尝试但显示此错误:

分配属性时,必须将哈希作为参数传递.

这是我的控制器代码:

 def edit
    @user = current_user
  end

 def update
    @user= current_user
   if @user.update_attributes(params[:current_user])
    # Handle a successful update.
  else
    render 'edit'
  end
end
Run Code Online (Sandbox Code Playgroud)

我的溃败:

get 'edit' => 'users#edit'
post  'edit'   => 'users#update'
Run Code Online (Sandbox Code Playgroud)

PARAMS:

private

def user_params
  params.require(:users).permit(:first_name, :last_name, :email)
end
Run Code Online (Sandbox Code Playgroud)

我的模特:

class User < ActiveRecord::Base
before_save { email.downcase! }

validates :first_name, :presence => true, :length => { :in => 3..20 }
validates :last_name, :presence => true, :length => { :in => 3..20 }
validates :email, :presence => true, :uniqueness => true, format: { with: /\A[^@\s]+@([^@.\s]+\.)+[^@.\s]+\z/ }

has_secure_password
validates :password, presence: true, length: { minimum: 6 }
end
Run Code Online (Sandbox Code Playgroud)

形成:

<%= form_for :user, url: my_account_path(@user), action: :update, method: :post  do |f| %>
    <%= f.text_field :first_name %>
    <%= f.text_field :last_name %>
    <%= f.text_field :email %>
    <%= f.submit "Update Account" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

请帮助我很多.

谢谢

spi*_*ann 5

您无法更新您的用户有两个原因:首先,您的表单将params嵌套在名为user(而不是current_user)的键下的数据发布:

@user.update_attributes(params[:user])
Run Code Online (Sandbox Code Playgroud)

其次,在您的模型中,您验证密码的存在,但您的表单不提供密码.看看文档has_secure_password.没有必要进行额外的验证.因此,只需删除该行:

validates :password, presence: true, length: { minimum: 6 }
Run Code Online (Sandbox Code Playgroud)