我收到此错误:未定义的局部变量或方法`user'代表#配置文件控制器第9行,“def更新方法后的第一行”BTW我正在为我的用户使用Devise。
class ProfileController < ApplicationController
before_action :authenticate_user!
def index
@user = current_user
end
def update
current_user.update(user.params)
redirect_to root_path
end
private
def user_params
params.require(user).permit(:first_name, :last_name)
end
end
这是我的application.html.erb,我的编辑器“Rubymine”告诉我,user_signed_in?,current_user,destroy_user_session_path,new_user_session_path和new_user_registration_path无法找到
<!DOCTYPE html>
<html>
<head>
<title>TwitterClone</title>
<%= stylesheet_link_tag 'application', media: 'all' %>
<%= javascript_include_tag 'application' %>
<!-- Compiled and minified CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.6/css/materialize.min.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<!-- Compiled and minified JavaScript -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.6/js/materialize.min.js"></script>
<%= csrf_meta_tags %>
</head>
<body>
<div class="right">
<% if user_signed_in? %>
Welcome <%= current_user.display_name %>,
<%= link_to "Logout", destroy_user_session_path, method: "DELETE" %>
<% else %>
Please
<%= link_to "Login", new_user_session_path %>
or
<%= link_to "Signup", new_user_registration_path %>
<% end %>
</div>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
<%= yield %>
</body>
</html>
我的路由是Devise为User生成的路由以及我对Profile所具有的路径:
profile GET /profile(.:format) profile#index
PATCH /profile(.:format) profile#update
这是生成的架构Devise:
ActiveRecord::Schema.define(version: 20160406005549) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.inet "current_sign_in_ip"
t.inet "last_sign_in_ip"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "first_name"
t.string "last_name"
end
add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree
end
答案 0 :(得分:2)
您的代码存在一些问题。对于初学者,你在控制器中调用一个未定义的变量。 user
应为符号,user.params应为user_params
class ProfileController < ApplicationController
before_action :authenticate_user!
def index
@user = current_user
end
def update
current_user.update(user_params)
redirect_to root_path
end
private
def user_params
params.require(:user).permit(:first_name, :last_name)
end
end
您还需要更新路线以支持您描述的用户操作:
在routes.rb中:
resources :users
最后,要使用Devise帮助器方法,请确保在routes.rb的顶部也有Devise路由:
devise_for :users