gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:51:15 29 4
gpt4 key购买 nike

我在这个级别的 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com