如何更新当前用户信息,我已尝试但显示此错误:
分配属性时,必须将哈希作为参数传递.
这是我的控制器代码:
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
我的溃败:
get 'edit' => 'users#edit' post 'edit' => 'users#update'
PARAMS:
private def user_params params.require(:users).permit(:first_name, :last_name, :email) end
我的模特:
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
形成:
<%= 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 %>
请帮助我很多.
谢谢
您无法更新您的用户有两个原因:首先,您的表单将params
嵌套在名为user
(而不是current_user
)的键下的数据发布:
@user.update_attributes(params[:user])
其次,在您的模型中,您验证密码的存在,但您的表单不提供密码.看看文档has_secure_password
.没有必要进行额外的验证.因此,只需删除该行:
validates :password, presence: true, length: { minimum: 6 }