RoR正在寻找我使用迁移命令删除的列

时间:2013-08-27 06:38:24

标签: ruby-on-rails database-schema

美好的一天。 我是ruby的新手,我试图用嵌套的“链接”字段构建一个简单的帖子。

E.g:

*****
TITLE
*****
POST
****

LINK - 1
LINK - 2
.
.
LINK - N 
****

使用3个迁移文件我有以下模式文件

ActiveRecord::Schema.define(version: 20130827060014) do

  create_table "links", force: true do |t|
    t.text     "link"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "posts", force: true do |t|
    t.string   "title"
    t.text     "body"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

end

前两个迁移文件是create table,当我为链接创建表时,我还添加了post_id列。 现在我决定使用以下命令删除此列:

$->rails g migration remove_field_name_from_links post_id:links
$->rake db:migrant

发布的“新”控制器看起来像这样

def new
    @new_post = Post.new
    3.times {@new_post.links.build}
end 

问题是,即使该列不再存在,系统仍在查找它,因为我收到以下错误消息:

SQLite3::SQLException: no such column: links.post_id: SELECT "links".* FROM "links"  WHERE "links"."post_id" = ?

这是视图文件:

<h1> <%= @post.title %></h1>
<p> <%= @post.body %></P>
<ul>
    <%= for links in @post.links do %>
        <li>
            <%= links.link %>
        </li>
    <% end %>
</ul>

任何想法?

1 个答案:

答案 0 :(得分:0)

删除列出帖子链接的ul标记的所有内容可能会修复您的错误。由于您不希望post_id表中的links列,我猜您也不希望这种关联。因此,当您完成删除此操作后,请从模型中删除此关联,并从控制器中删除正确的调用(例如3.times {@new_post.links.build})。

发生错误是因为当您有关联时,Rails希望links表具有post_id列。由于您删除了此列,因此会出错。