jjzjj

ruby-on-rails-3 - Rails3 Mysql2::Error: Unknown column - ActiveRecord::StatementInvalid

coder 2023-10-25 原文

我在这个级别的 Rails 中使用数据库是新手,我已经寻找了几个小时,但没有找到解决这个特定问题的方法。

版本:Rails 3.2.9、Ruby 1.9.3、MySQL 5.5.28 (mysql2 gem 2.9.0)、Mac OS 10.7.5

错误:

ActiveRecord::StatementInvalid in Action_figures#list

Mysql2::Error: Unknown column 'action_figures.position' in 'order clause': SELECT `action_figures`.* FROM `action_figures`  ORDER BY action_figures.position ASC

提取的源代码(大约第 14 行):[list.html.erb]

11:       <th>Visible</th>
12:       <th>Actions</th>
13:     </tr>
14:     <% @action_figures.each do |action_figure| %>
15:     <tr>
16:       <td><%= action_figure.position %></td>
17:       <td><%= action_figure.name %></td>

我生成了 ActionFigures 模型和 Controller ,但稍后在迁移文件中指定了 :position、:name 等:

class CreateActionFigures < ActiveRecord::Migration
  def change
    create_table :action_figures do |t|
      t.string "name"
      t.integer "position"
      t.boolean "visible", :default => false
      t.timestamps
    end
  end
end

模型中的这个:

class ActionFigure < ActiveRecord::Base
  has_many :pages
  attr_accessible :name, :position, :visible
end

我已经多次运行 rake db:migrate,停止并重新启动服务器,关闭并重新打开终端只是为了确保不是那些东西,但是当我这样做时:

mysql> SHOW FIELDS FROM action_figures;

我得到下表:

+------------+----------+------+-----+---------+----------------+
| Field      | Type     | Null | Key | Default | Extra          |
+------------+----------+------+-----+---------+----------------+
| id         | int(11)  | NO   | PRI | NULL    | auto_increment |
| created_at | datetime | NO   |     | NULL    |                |
| updated_at | datetime | NO   |     | NULL    |                |
+------------+----------+------+-----+---------+----------------+

问题:

  1. 为什么 :name、:position 和 :visible 没有出现在表格中?
  2. 我现在如何添加它们?

最佳答案

如果您在旧的 ActionFigures 迁移文件中指定了位置、名称和其他所有内容,db:migrate 将不会获取该文件中的更改。

如果您查看 db 文件夹中的 schema.rb 文件,它有一个版本号。该数字与上次运行的迁移文件中的数字相匹配。因此,当您运行 rake db:migrate 时,它会考虑该数字,因此不会在此之前重新运行迁移。发生这种情况是为了让表不会尝试重新创建等等......

您有几个选择:

  1. 如果此后您还没有进行其他迁移,请执行 rake db:rollback 以撤销创建 ActionFigure 表的更改。

  2. 执行 rake db:drop,然后执行 rake db:createrake db:migrate 以使用您所做的更改重新创建表在迁移中制作。

  3. 删除您在迁移文件中所做的更改并使用 rails g migration add_name_and_position_to_action_figures name position:integer 进行新迁移并运行 rake db:migrate 以对您的表格进行更改。

还有其他方法,但总的来说,我只会选择 2 或 3,具体取决于您数据库中的数据。

希望这对您有所帮助!

关于ruby-on-rails-3 - Rails3 Mysql2::Error: Unknown column - ActiveRecord::StatementInvalid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13828983/

有关ruby-on-rails-3 - Rails3 Mysql2::Error: Unknown column - ActiveRecord::StatementInvalid的更多相关文章

随机推荐