【发布时间】:2018-12-21 06:46:46
【问题描述】:
我创建了一个使用 devise 的简单 Rails 应用程序。对于登录和退出,我使用具有电子邮件 + 密码的标准 USER 模型。我有一个 PROFILE 模型来存储用户的所有其他详细信息。
我想创建一个页面,用户可以在其中更新他们的所有详细信息。当前出现以下错误...
UsersController#update 中的 NoMethodError
nil:NilClass 的未定义方法“名称”
Screenshot of entire error message
我的模型看起来是这样的......
class User < ApplicationRecord
Include default devise modules. Others available are:
:confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable
has_one :profile
after_create :create_profile
attr_accessor :first_name, :last_name, :description
accepts_nested_attributes_for :profile
end
class Profile < ApplicationRecord
belongs_to :user
end
查看页面代码看起来像...
<h1>Account Details</h1>
<p><strong>Email:</strong> <%= @user.email %></p>
<p><strong>First Name:</strong> <%= @user.profile.first_name %></p>
<p><strong>Last Name:</strong> <%= @user.profile.last_name %></p>
<%= form_for(@user, :as => :user) do |field| %>
<p>
<%= field.label :email %>
<%= field.text_field :email %>
</p>
<%= fields_for @user.profile do |profile| %>
<p>
<%= profile.label :first_name %><br>
<%= profile.text_field :first_name %>
<% end %>
</p>
<p>
<%= field.submit "Update" %>
</p>
<% end %>
控制器看起来像
Class UsersController < Devise::RegistrationsController
def new
build_resource({})
resource.build_profile
respond_with self.resource
end
def create
super
end
def edit
super
end
def update
@user = current_user
end
def show
@user = current_user
end
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up) { |u|
u.permit(:email, :password, [profile_attributes: [ :first_name, :last_name]])
}
end
end
我无法使用此表单来渲染和更新模型。我希望有人能告诉我我做错了什么。
【问题讨论】:
标签: ruby-on-rails devise