我有两个项目,用户和帖子,以及将它们链接在一起的连接表。这两个项目之间具有has_many关系(:通过连接表)。我在创建两个数据库后创建了连接表。我遇到的问题是,每当我尝试使用@ user.posts或@ post.users执行某些操作时,我都会收到错误。这几乎就像他们没有正确设置。在某处我读到如果你在创建模型后创建一个关联,那么你必须使用add_column方法。那是我的问题吗?我不确定如何实现该方法或任何东西。这是我得到的错误:
SQLite3 :: SQLException:没有这样的列:users.post_id:SELECT“users”。* FROM“users”WHERE“users”。“post_id”= 60 AND“users”。“id”=?限制1
从我需要添加列的错误看起来,但我不知道如何做到这一点。
这是我最新的schema.db:
ActiveRecord::Schema.define(:version => 20110930155455) do
create_table "posts", :force => true do |t|
t.text "content"
t.integer "vote_count"
t.text "author"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "user_id"
end
create_table "users", :force => true do |t|
t.string "user_name"
t.string "password"
t.date "time"
t.integer "posts_id"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "post_id"
end
create_table "votes", :force => true do |t|
t.integer "post_id"
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
end
end
答案 0 :(得分:0)
是的,您需要为外键创建迁移。您需要将post_id
添加到:users表,其类型为integer。执行
rails g migration AddPostIdToUsers post_id:integer
生成迁移。你应该创建一个看起来像
的class AddPostIdToUsers < ActiveRecord::Migration
def change
add_column :users, :post_id, :integer
end
end
你可能还想考虑设置一个* has_many:通过关联*,它会给你更多的控制权。