为什么不在更新显示此错误的用户信息时更新用户信息:
nil的未定义方法`update_attributes':NilClass
我的代码出了什么问题,如下所示:
控制器:
def edit
@users= User.find(params[:user_id])
end
def update
#@users= User.find(params[:user_id])
if @users.update_attributes(user_params)
flash[:notice] = "User updated"
render 'edit'
else
render 'edit'
end
end
private
def user_params
params.require(:users).permit(:first_name, :last_name, :father_name, :mother_name )
end
形式:
<%= form_for :users, url: edit_path(@users), action: :update, method: :post do |f| %>
<%= f.text_field :first_name %>
<%= f.text_field :last_name %>
<%= f.text_field :father_name %>
<%= f.text_field :mother_name %>
<%= f.submit "Update" %>
<% end %>
路线:
get 'edit' => 'users#edit'
post 'edit' => 'users#update'
型号:
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 }
由于
答案 0 :(得分:1)
答案 1 :(得分:0)
nil的未定义方法`update_attributes':NilClass
您需要 取消注释 #@users= User.find(params[:user_id])
行动中的update
行。
def update
@users= User.find(params[:user_id])
if @users.update_attributes(user_params)
flash[:notice] = "User updated"
render 'edit'
else
render 'edit'
end
end
答案 2 :(得分:0)
这样做:
#config/routes.rb
resources :users, only: [:edit, :update] #-> url.com/users/:id/edit
#app/controllers/users_controller.rb
class UsersController < ApplicationController
def edit
@user = User.find params[:id]
end
def update
@user = User.find params[:id] #-> this is where your error occurs
@user.update user_params
end
private
def user_params
params.require(:user).permit(:first_name, :last_name, :father_name, :mother_name)
end
end
#app/views/users/edit.html.erb
<%= form_for @user do |f| %>
<% fields = @user.attributes - %i(id created_at updated_at) %>
<% fields.each do |field| %>
<%= f.text_field field %>
<% end %>
<%= f.submit %>
<% end %>
-
在update_attributes
上呼叫@users
要求@users
成为班级的实例。在您的情况下,它尚未被调用,这会导致NilClass
错误。
由于Ruby是面向对象的语言,因此它将每个数据视为对象,甚至是未声明的对象。当您看到undefined method for NilClass
错误时,它基本上意味着您正在尝试操纵不存在的变量。