ActiveRecord::StatementInvalid in UsersController#create(插入不包括新添加的列)

ActiveRecord::StatementInvalid in UsersController#create (Insert does not include newly added column)

我目前正在 ruby 自学 rails 获得学位。我真的是这门语言的新手,想了解更多关于迁移如何工作的信息。

Error Of problem

我已通过迁移更新我的现有用户 table 以允许添加一个列 'username' 并包含一些 HTML/Ruby 以允许用户在该字段中输入。我无法理解 rails 如何生成 INSERT SQL 语句或在迁移时更新它们。

下面是我的 HTML

代码

<%= form_for(user) do |f| %>
  <% if user.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(user.errors.count, "error") %> prohibited this user from being saved:</h2>

      <ul>
      <% user.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :username %>
    <%= f.text_field :username %>
  </div>


  <div class="field">
    <%= f.label :password %>
    <%= f.text_field :password %>
  </div>

  <div class="field">
    <%= f.label :email %>
    <%= f.text_field :email %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

这是迁移后的架构

Schema After rake db:migrate

我一定是漏掉了什么...

如果您查看服务器日志,您应该会找到类似 Unpermitted parameter username.

的内容

您应该允许白名单参数列表中的 username 字段。我假设您的 users_controller.rb 中有一个 user_params 方法。修改它以允许新创建的 username 字段。

def user_params
  params.require(:user).permit(:username, :password, :email)
end