【发布时间】:2014-01-17 04:04:06
【问题描述】:
在通过 Devise 创建用户模型后,我决定为用户名添加一列。我意识到我需要使其可访问,以便在用户提交新用户表单时数据库能够正确更新。然后我意识到,由于这是 Rails 4,我必须通过控制器来做到这一点,而 Devise 并没有为我的 User 模型提供控制器。所以我按照设计页面上的说明创建了自己的自定义控制器并更改了使用它的路线。这是我的自定义控制器,我把它放在apps/controllers/users:
class Users::RegistrationsController < Devise::RegistrationsController
def new
super
end
def create
super
end
def edit
super
end
private
def user_params
params.require(:user).permit(:username, :email, :password, :password_confirmation)
end
end
然后我修改了routes.db:
devise_for :users, :controllers => { :registrations => "users/registrations" }.
我的表单如下所示:
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => {:class => 'form-horizontal'}) do |f| %>
<%= devise_error_messages! %>
<div class="control-group">
<div class="control-label">
<%= f.label :username %>
</div>
<div class="controls">
<%= f.text_field :username %>
</div>
</div>
<div class="control-group">
<div class="control-label">
<%= f.label :email %>
</div>
<div class="controls">
<%= f.email_field :email, :autofocus => true %>
</div>
</div>
<div class="control-group">
<div class="control-label">
<%= f.label :password %>
</div>
<div class="controls">
<%= f.password_field :password %>
</div>
</div>
<div class="control-group">
<div class="control-label">
<%= f.label :password_confirmation %>
</div>
<div class="controls">
<%= f.password_field :password_confirmation %>
</div>
</div>
<div class="control-group">
<div class="controls">
<%= f.submit "Sign up" %>
</div>
</div>
<div class="control-group">
<div class="controls">
Already have an account? <%= render "devise/shared/links" %>
</div>
</div>
<% end %>
我按照设计页面上的说明复制了/devise/registrations' views to/users/registrations`。
我没有收到任何错误,但无论出于何种原因,当我测试表单时,它会将除用户名之外的所有内容写入数据库。我可以进入 Rails 控制台并使用用户名创建用户,但表单不会发生这种情况。我的目标是让application.html.erb 中的以下代码行工作:
Logged in as <%= current_user.username %>
但它永远不会起作用,并且失败反映在控制台中,控制台一直将用户名显示为“nil”。
有人知道我做错了什么吗?哪里错了??我的 Post 模型遇到了类似的问题,某些内容没有更新,但我能够通过更改 PostController 中可访问的属性来修复它。感谢您的帮助!
【问题讨论】:
标签: ruby-on-rails forms devise ruby-on-rails-4