【问题标题】:ActiveRecord::StatementInvalid in UsersController#create (Insert does not include newly added column)UsersController#create 中的 ActiveRecord::StatementInvalid(插入不包括新添加的列)
【发布时间】:2016-09-02 15:37:42
【问题描述】:

我目前正在按照我的学位自学 Ruby on Rails。我对这门语言真的很陌生,想了解更多关于迁移的工作原理。

Error Of problem

我已通过迁移更新了现有的用户表,以允许额外的“用户名”列,并包含一些 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

我一定是错过了什么……

【问题讨论】:

  • 你的链接丢失了,所以我看不到你做了什么,但是......但是,你运行rake db:migrate了吗?
  • @OwenCarter,您可以在users_controller.rb 中发布您的代码吗?我添加了一个答案,但它基于假设。

标签: mysql ruby ruby-on-rails-3 activerecord


【解决方案1】:

如果您查看服务器日志,您应该会发现类似Unpermitted parameter username 的内容。

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

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

【讨论】:

  • 非常感谢,我觉得自己太愚蠢了,因为忘记了这一点:)!
  • 抱歉花了一段时间才让我这样做:)!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 2016-08-24
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多