join table和has_many关系不起作用

时间:2011-09-30 14:55:48

标签: ruby-on-rails ruby associations has-many-through

我有两个项目,用户和帖子,以及将它们链接在一起的连接表。这两个项目之间具有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

1 个答案:

答案 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:通过关联*,它会给你更多的控制权。