如何更新当前用户信息,我已尝试但显示此错误:
分配属性时,必须将哈希作为参数传递。
这是我的控制器代码:
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 %>
请帮助我。
谢谢
答案 0 :(得分:5)
您无法更新您的用户有两个原因:首先,您的表单会在params
嵌套在名为user
的键(而不是current_user
)下的@user.update_attributes(params[:user])
中发布数据:
validates :password, presence: true, length: { minimum: 6 }
其次,在您的模型中,您验证是否存在密码,但您的表单未提供密码。看看documentation of has_secure_password
。没有必要进行额外的验证。因此,只需删除该行:
{{1}}
答案 1 :(得分:3)
您需要修改update
语句,如下所示:
@user.update_attributes(user_params)
这将更新用户的允许属性。
答案 2 :(得分:2)
正确的方法是使用以下内容:
#config/routes.rb
resource :user, path: "", only: [:edit, :update] #-> url.com/edit
#app/controllers/users_controller.rb
class UsersController < ApplicationController
def edit
@user = current_user #-> you don't really need this
end
def update
if current_user.update user_params
# do something
else
render :edit
end
end
private
def user_params
params.require(:user).permit(:x, :y, :z)
end
end